Python 3.x django restframework。如何更改序列化程序中的多对多字段名称?
我知道用Python 3.x django restframework。如何更改序列化程序中的多对多字段名称?,python-3.x,django,django-rest-framework,Python 3.x,Django,Django Rest Framework,我知道用source参数更改序列化程序中表示的文件名相对简单,如下所示: class SomeSerializer(ModelSerializer): alternate_name = serializers.SomeField(source='field_name') class Meta: fields = ('alternate_name') 但在处理多对多字段时,源代码是一个多相关管理器,在其中使用源代码会导致错误: class SomeModel(m
source
参数更改序列化程序中表示的文件名相对简单,如下所示:
class SomeSerializer(ModelSerializer):
alternate_name = serializers.SomeField(source='field_name')
class Meta:
fields = ('alternate_name')
但在处理多对多字段时,源代码
是一个多相关管理器
,在其中使用源代码会导致错误:
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对象不可编辑代码>
使用其他字段而不是ListField
会产生其他错误。这里的正确方法是什么?您可以使用obj.field\u 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')
对于此序列化程序,您需要使用many=True的嵌套序列化程序