我正在序列化内置的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
}
任何帮助将不胜感激。感谢。
答案 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
。
我正在使用这种方法,但是我想在此转换为序列化器方法,作为其他人的答案。谢谢大家。