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的嵌套序列化程序