Django:更改序列化程序中字段的表示

Django: changing representation of a field in serializer

我有一个显示平均分数的字段,它取决于另一个模型的字段。我使用 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

它可以工作,但 return 它不能以我需要的方式工作。现在我得到的数据看起来像:

"rating" : {
    "score__avg" : some_value
}

如何更改为:

"rating" : some_value

提前致谢。

您为聚合表达式命名,因此使用 named 参数:

def get_rating(self, obj):
    # returns {'rating': … }
    return obj.reviews.aggregate(<b>rating=</b>Avg('score'))

或者您可以将其从字典中解包出来:

def get_rating(self, obj):
    # returns … (value)
    return obj.reviews.aggregate(Avg('score'))<b>['score__avg']</b>