Я пытаюсь создать таблицы с полями на основе метаданных, объявленных в других классах. Мой текущий подход выглядит примерно так:
metadata = { ... }
class CustomModel(MyBaseModel):
field1 = CharField(...)
field2 = CharField(...)
...
for key, info in metadata.items():
setattr(CustomModel, key, fieldFrom(info))
В настоящее время происходит то, что таблица создается и поля, объявленные в классе, включаются в миграцию.
НО поля, включенные через setattr
не включаются в миграцию, даже если они правильно отображаются в классе при проверке с помощью отладчика. Есть ли магия, которая работает только для полей, объявленных «на месте»? Как я могу динамически установить эти поля?
РЕДАКТИРОВАТЬ: модели все еще статичны. Суть здесь в том, что когда я делаю изменения в исходных метаданных, эти изменения будут распространяться (т.е.) на несколько моделей и / или полей. Без этого мне пришлось бы полностью добавить поля к нескольким моделям вручную.
EDIT2:
Я приведу пример, который на самом деле не является моим текущим случаем, но также применим. Представьте, что у меня есть файл openAPI (swagger) где-то внутри моего проекта, и я хотел динамически создавать таблицы на основе его ключа definitions
. В этом нет ничего страшного, верно?
Этот файл swagger.json будет статичным. Всякий раз, когда я вносил в него изменения, я запускал makemigrations
, и он добавлял необходимые изменения в мою БД.
(Теперь, пожалуйста, не приходите с ", но вы не должны создавать данные изswagger.json ", это не главное в моем вопросе - и это даже вымышленный пример. Я не просил совета по архитектуре, спасибо!)