[英]Django Rest Framework: Change Serializer or Add Field Based on Authentication
[英]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.