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