Вы, вероятно, не сможете сделать это, не взломав внутренности Джанго. Команда syncdb
проверяет мета-объект для каждой модели, чтобы получить список полей для создания, который создается во время создания класса через метакласс базового класса django.db.models.Model
:
class MyModel(models.Model):
my_filed = models.CharField(...)
# Here, class construction is complete and your class has a _meta member.
# If you want, you can check it out in the interactive shell.
meta = MyModel._meta
После завершения строительства класса, например, после DEDENT после оператора class
мета-объект фиксируется (на него не влияет изменение класса модели), и вам придется взламывать мета (что, конечно, возможно), чтобы добавить динамические поля. Но так как вы тут возитесь с внутренними объектами, это может сделать ваше приложение несовместимым с будущими выпусками Django.
Остается вопрос: зачем вам это делать? Поскольку таблицы базы данных обычно создаются только один раз при развертывании приложения, модели выглядят как «статичные».