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

时间:2015-10-26 11:51:24

标签: python django serialization

我正在序列化内置的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
}

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

3 个答案:

答案 0 :(得分:42)

有点迟但是简短的回答。试试这个

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

答案 1 :(得分:26)

这应该有效

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 :(得分:1)

每个人的答案都很好。我想在这里提供其他选项-如果可以修改目标模型,请使用@property if-and-only-。

假设您可以修改Group模型。

class Group(models.Model):

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

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

我正在使用这种方法,但是我想在此转换为序列化器方法,作为其他人的答案。谢谢大家。