【问题标题】:save to model after computed in serializer在序列化程序中计算后保存到模型
【发布时间】:2021-03-26 07:37:51
【问题描述】:

序列化器将计算数据的平均分数并返回到字段weekly_score中查看

class BrandChartsSerializer(serializers.ModelSerializer):
    rankings = serializers.SerializerMethodField()
    instagram = IGSerializer(allow_null=True)
    facebook = FBSerializer(allow_null=True)
    hashtags = BrandHashtagSerializer(allow_null=True, many=True)
    # rename the json field
    brand_uid = serializers.IntegerField(source='id')
    brand_name = serializers.CharField(source='name')
    origin = serializers.CharField(source="country")
    weekly_score = serializers.SerializerMethodField()

    class Meta:
        model = Brand
        fields = [
            "rankings",
            "brand_uid",
            "brand_name",
            "origin",
            "instagram",
            "facebook",
            "hashtags",
            "weekly_score",
        ]


    def get_weekly_score(self,instance):
        data = self.get_rankings(instance)
        result = 0
        counter = 0
        while data:
            rankings = data.pop()
            for key,value in rankings.items():
                isFloat = isinstance(value,float)
                if isFloat:
                    result += value
                    counter += 1
        if counter is not 0:
            result = result/counter
        return result

我将在视图中按sorted() 进行排序并返回为list

它的工作,但我发现它的速度非常非常慢,所以我想加快它。

我想我可以尝试的一种方法是,save 计算出的模型每周分数(它已经在模型设计中具有字段)所以我可以使用 order_bymodels

所以问题是,我可以同时阅读和更新view吗?

我可以在BrandChartsSerializer 中执行save/update 操作吗?或在同一个viewset 中(例如在一个视图中调用两个序列化程序等)

【问题讨论】:

    标签: django django-models django-rest-framework django-serializer


    【解决方案1】:

    Serializer Save 方法用于添加计算数据:

    def save(self, **kwargs):
    
        kwargs["weekly_score_on_model"] = calculate_weekly_score(self.validated_data)
    
        self.instance = super().save(**kwargs)
        return self.instance
    

    【讨论】:

      猜你喜欢
      • 2016-12-10
      • 1970-01-01
      • 2018-09-10
      • 2018-04-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多