Python 使用`\u init\u子类的django模型的动态字段__`
如何使用Python 使用`\u init\u子类的django模型的动态字段__`,python,django,python-3.x,model-view-controller,django-models,Python,Django,Python 3.x,Model View Controller,Django Models,如何使用\uuu init\u subclass\uuuu将模型字段动态复制到子类(带有变体…),我尝试了以下方法: @classmethod def __init_subclass__(cls, *args, **kwargs): ... for field, field_name in vars(base_model).items(): if isinstance(DeferredAttribute): field.contribute_to_clas
\uuu init\u subclass\uuuu
将模型字段动态复制到子类(带有变体…),我尝试了以下方法:
@classmethod
def __init_subclass__(cls, *args, **kwargs):
...
for field, field_name in vars(base_model).items():
if isinstance(DeferredAttribute):
field.contribute_to_class(cls, new_name, changed_field)
...
但是,DeferredAttribute
没有contribution\u to\u class
方法。此外,我不能使用EVA模式等。如果可能的话,必须使用这种方法
使用vars
因为这是\uuuu init\u子类\uuuuuu
那么模型。\u meta.get\u fields()
实际上还不存在
我可以做到:
for extension in extensions:
for field in base_model._meta.local_fields:
copied_field = field.__copy__()
if not cls._meta.abstract:
copied_field.contribute_to_class(cls, new_name)
但是,这在模型的modelslocal\u字段
属性中根本不显示。因此,contribution\u to\u类
似乎不起作用
我尝试过使用更高级别的
add_to_class
,即-cls。add_to_class(复制的_字段,新的_名称)
,对扩展模型也有同样的影响 你解决问题了吗?我想做一件类似的事情,我很好奇你到底把\uuuu init\u子类放在哪里。我试图创建一个mixin,并让我的模型继承这两个模型。model
和定义\uuuuu init\u subclass\uuuuuu
的mixin,但是在定义\uuu meta
之前调用了\uuuu init\u subclass\uuuuuu
,因此该方法无法获取任何声明字段的属性。