【发布时间】: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_by 的 models。
所以问题是,我可以同时阅读和更新view吗?
我可以在BrandChartsSerializer 中执行save/update 操作吗?或在同一个viewset 中(例如在一个视图中调用两个序列化程序等)
【问题讨论】:
标签: django django-models django-rest-framework django-serializer