Django: изменение представления поля в сериализаторе - PullRequest
1 голос
/ 03 мая 2020

У меня есть поле, которое отображает среднюю оценку и зависит от поля другой модели. Я использую 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

Заранее спасибо.

1 Ответ

1 голос
/ 03 мая 2020

Вы даете агрегированному выражению имя, поэтому с параметром с именем :

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

или вы можете развернуть его из словаря:

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