Добавьте поле count в сериализатор рамки django rest

Я сериализую встроенную модель группы django и хотел бы добавить поле в сериализатор, который подсчитывает количество пользователей в группе. В настоящее время я использую следующий сериализатор:

class GroupSerializer(serializers.ModelSerializer):
    class Meta:
        model = Group
        fields = ('id', 'name', 'user_set')

Это возвращает идентификатор группы и имя и массив пользователей (идентификаторы пользователей) в группе:

{
    "id": 3,
    "name": "Test1",
    "user_set": [
      9
    ]
}

Вместо этого я хотел бы выводить результат:

{
    "id": 3,
    "name": "Test1",
    "user_count": 1
}

Любая помощь будет оценена по достоинству. Спасибо.

Ответ 1

Это должно работать

class GroupSerializer(serializers.ModelSerializer):

    user_count = serializers.SerializerMethodField()

    class Meta:
        model = Group
        fields = ('id', 'name','user_count')

    def get_user_count(self, obj):
        return obj.user_set.count()

Это добавляет поле user_count к вашему сериализатору, значение которого задается get_user_count, которое вернет длину user_set.

Дополнительную информацию о SerializerMethodField можно найти здесь: http://www.django-rest-framework.org/api-guide/fields/#serializermethodfield

Ответ 2

Немного поздно, но короткий ответ. Попробуйте это

user_count = serializers.IntegerField(
    source='user_set.count', 
    read_only=True
)