Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用`\u init\u子类的django模型的动态字段__`_Python_Django_Python 3.x_Model View Controller_Django Models - Fatal编程技术网

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)
但是,这在模型的models
local\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
,因此该方法无法获取任何声明字段的属性。