繁体   English   中英

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

[英]Add a count field to a django rest framework serializer

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

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
}

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

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

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

这应该工作

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

每个人的回答都很棒。 我想在这里提供另一个选项 - 如果你可以修改目标模型,可以使用@property if-and-only。

假设您可以修改Group模型。

class Group(models.Model):

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

然后,您只需将'user_count'添加到序列化程序中的fields

我正在使用这种方法,但我想在这里切换到串行器方法作为其他人的答案。 感谢大家。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM