Python DRF-动态添加字段-(第一次有效,然后抛出错误)

Python DRF-动态添加字段-(第一次有效,然后抛出错误),python,django,python-3.x,django-rest-framework,Python,Django,Python 3.x,Django Rest Framework,我想修改一个序列化程序,使其包含FIELD\u display字段,对于每个有任何选择的字段,其值为get\u FIELD\u display 我试图在\uuuu init\uuuu方法中动态添加这些字段,它可以工作,但刷新后会引发错误: Field name `ownership_display` is not valid for model `RealEstate`. 序列化程序 class ApiRealestateSerializer(serializers.ModelSerializ

我想修改一个
序列化程序
,使其包含
FIELD\u display
字段,对于每个有任何选择的字段,其值为
get\u FIELD\u display

我试图在
\uuuu init\uuuu
方法中动态添加这些字段,它可以工作,但刷新后会引发错误:

Field name `ownership_display` is not valid for model `RealEstate`.
序列化程序

class ApiRealestateSerializer(serializers.ModelSerializer):

    class Meta:
        model = RealEstate
        fields = [x.name for x in RealEstate._meta.fields]

    def __init__(self, instance=None, data=None, **kwargs):
        super().__init__(instance, data, **kwargs)
        self.set_display_fields()


    def set_display_fields(self):
        """adds FIELD_display field for every CharField (eg. name = "peter", name_display = "Peter" )"""
        for field in RealEstate._meta.fields:
            if field.choices:
                fieldname = f"{field.name}_display"
                self.fields[fieldname] = serializers.CharField(source=f'get_{field.name}_display')
                self.Meta.fields.append(fieldname)

你知道如何使它工作吗?

我注意到的第一件事是,在设置显示字段之前,你正在调用
super()。初始化
,因此父类方法可能会抛出该错误,因为当它检查字段是否还不存在时,但是你没有发布完整的回溯,也没有发布足够的信息让我复制


最好能准确地告诉我们您真正想要什么,因为您为该序列化程序所采用的模式看起来。。。不太好。

你想做什么?你的最终目标是什么?@GregSchmit扩展API,这样当模型中有例如
子类别
字段时,你不仅可以看到
子类别
=“table\u tenis”,它还会自动将
子类别显示
=“table tenis”添加到序列化数据中。啊,明白了,我发布了半个答案,更多的回溯将有助于查看错误发生的位置,还可以尝试将
set\u display\u fields
调用放在
super()之前。