如何解决django-restframework如何在序列化程序中更改多对多字段名称?
我知道使用 source
参数更改序列化程序中表示的文件名相对简单,如下所示:
class SomeSerializer(ModelSerializer):
alternate_name = serializers.someField(source='field_name')
class Meta:
fields = ('alternate_name')
但是在处理多对多字段时,source
是 ManyRelatedManager
并且在其中使用 source
会导致错误:
class SomeModel(models.Model):
field_name = models.ManyToManyField(OtherModel,related_name='groups')
class SomeModelSerializer(ModelSerializer):
alternate_name = models.ListField(source='field_name')
class Meta:
fields = ('alternate_name')
这给 ManyRelatedManager object is not iterable!
使用其他字段而不是 ListField
会导致其他错误。这里的正确方法是什么?
解决方法
如上所述,您可以使用 obj.field_name.filter()
获取相关数据并从 SerializerMethodField()
返回。
我就是这样做的,不确定它是否适合你。
class SomeModel(models.Model):
field_name = models.ManyToManyField(OtherModel,related_name='groups')
class SomeModelSerializer(ModelSerializer):
#name this field whatever you want
some_name = serializers.SerializerMethodField()
# SerializerMethodField gets populated from "get_{filed_name}" method
def get_some_name(self,obj):
#this will return a list
return obj.field_name.filter()
class Meta:
fields = ('some_name')
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。