向Django rest框架serializ添加计数字段

2024-09-30 20:28:21 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

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

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

作为输出,我想要的是:

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

任何帮助都将不胜感激。谢谢。


Tags: django用户name模型程序id序列化内置
3条回答

回答有点晚,但简短。试试这个

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

每个人的回答都很好。我想在这里提供另一个选项-使用@property如果并且仅当您可以修改目标模型时。

假设您可以修改Group模型。

class Group(models.Model):

    @property
    def user_count(self):
        return self.user_set.count

然后您可以简单地将'user_count'添加到序列化程序中的fields

我正在使用这种方法,但我正在考虑切换到序列化器方法作为其他方法的答案。谢谢大家。

这应该管用

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

相关问题 更多 >