我有一个字段,它显示平均分数,并取决于另一个模型的字段。我使用SerializerMethodField来获得所需的值。它看起来像这样:
class TitleSerializer(serializers.ModelSerializer):
rating = serializers.SerializerMethodField()
class Meta:
fields = '__all__'
model = Titles
def get_rating(self, obj):
rating = obj.reviews.all().aggregate(Avg('score'))
return rating
它有效,但没有以我需要的方式返回。现在我得到的数据看起来像:
"rating" : {
"score__avg" : some_value
}
如何将其更改为:
"rating" : some_value
提前谢谢。
您为聚合表达式命名,因此使用名为的参数:
def get_rating(self, obj):
# returns {'rating': … }
return obj.reviews.aggregate(rating=Avg('score'))
或者你可以从字典中打开它:
def get_rating(self, obj):
# returns … (value)
return obj.reviews.aggregate(Avg('score'))['score__avg']