Как мне динамически копировать поля моделей в подклассы (с вариациями ...), используя __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)
, и то же самое влияло на расширенную модель.