我如何使用__init_subclass__
将模型字段动态复制到子类(具有变体...),我已经尝试过:
@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
没有contribute_to_class
方法。而且,我不能使用EVA模式等。如果可能的话,必须特别使用这种方法。
使用vars
,因为既然是__init_subclass__
,那么model._meta.get_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)
但是,这在模型local_fields
属性中根本没有出现在模型中。因此,看来contribute_to_class
无效。
我尝试使用较高级别的add_to_class
,即-cls.add_to_class(copied_field, new_name)
,并且对扩展模型具有相同的影响。