【问题标题】:Django: changing representation of a field in serializerDjango:在序列化程序中更改字段的表示
【发布时间】:2020-08-17 20:34:29
【问题描述】:

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

提前致谢。

【问题讨论】:

    标签: django django-rest-framework django-queryset


    【解决方案1】:

    你给聚合表达式一个名字,所以用 named 参数:

    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']

    【讨论】:

    • 再次感谢威廉 :)
    猜你喜欢
    • 2017-09-01
    • 2015-09-05
    • 2015-02-12
    • 1970-01-01
    • 1970-01-01
    • 2021-11-08
    • 2014-08-05
    • 1970-01-01
    • 2021-11-30
    相关资源
    最近更新 更多