将计数字段添加到django rest框架序列化程序

Dav*_*own 22 python django serialization

我正在序列化内置的django Group模型,并希望在序列化程序中添加一个字段来计算组中的用户数.我目前正在使用以下序列化程序:

class GroupSerializer(serializers.ModelSerializer):
    class Meta:
        model = Group
        fields = ('id', 'name', 'user_set')
Run Code Online (Sandbox Code Playgroud)

这将返回组ID和名称以及组中的用户数组(用户ID):

{
    "id": 3,
    "name": "Test1",
    "user_set": [
      9
    ]
}
Run Code Online (Sandbox Code Playgroud)

我希望改为输出是这样的:

{
    "id": 3,
    "name": "Test1",
    "user_count": 1
}
Run Code Online (Sandbox Code Playgroud)

任何帮助,将不胜感激.谢谢.

Lal*_*ada 46

有点晚但回答简短.试试这个

user_count = serializers.IntegerField(
    source='user_set.count', 
    read_only=True
)
Run Code Online (Sandbox Code Playgroud)

  • 很棒的答案....这也将工作`user_count = serializers.ReadOnlyField(source ='user_set.count')` (6认同)

emr*_*re. 30

这应该工作

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()
Run Code Online (Sandbox Code Playgroud)

这会user_count为您的序列化程序添加一个字段,其值设置为get_user_count,将返回该字段的长度user_set.

您可以在此处找到有关SerializerMethodField的更多信息:http://www.django-rest-framework.org/api-guide/fields/#serializermethodfield

  • 也许是obj.user_set.count()或者其他东西 (2认同)