Хотя в Django есть инструменты, которые позволяют это делать, в действительности это не нужно.
Вам необходимо иметь в виду, что при импорте models.py
ваши динамически созданные классы должны быть доступны в пространстве имен модуля.
Итак, все, что вам нужно сделать, это вызвать любой код, создающий классы в коде на уровне модуля models.py
, и убедиться, что они там видны - это может быть просто:
from django.db import models
def create_classes():
Meta = type("Meta", (), {"app_label": "test2"})
DynamicUser = type("DynamicUser", (models.Model,), {"name": models.TextField(255), "__module__": __file__, "Meta": Meta})
return DynamicUser
DynamicUser = create_classes()
если вы не знаете во время кодирования названия и количества классов, то вы можете обновить возвращаемый globals()
диктионар классами и их именами.
Давайте предположим, что функция create_classes
будет возвращать списочные классы - это можно сделать в models.py
def materialize_for_migration():
classes = create_classes
globals().update({cls.__name__: cls for cls in classes})
materialize_for_migration()