При динамическом создании таблицы django, как я могу задать класс Meta?
У меня есть абстрактный класс модели Django и я хочу создать его динамически с помощью мета-класса.
class AccountTransaction(models.Model):
class Meta:
abstract = True
account_num = models.ForeignKey('Account', on_delete=models.CASCADE)
tran_amt = models.PositiveBigIntegerField()
tran_type = models.CharField()
tran_detail = models.CharField()
tran_time = models.DateTimeField(auto_now_add=True)
for i in range(10):
model_name = f'account_transaction_{i:02}'
globals()[model_name] = type(model_name, (AccountTransaction, ), {'__module__': AccountTransaction.__module__})
Я могу создать 10 таблиц с помощью этого кода при выполнении makemigrations
и migrate
Можно ли установить разные метаклассы для каждой таблицы?
Например,
счет_транзакции_01
class Meta:
db_table: "table1"
счет_транзакции_02
class Meta:
db_table: "table2"
Я думаю, вам придется сделать больше, чем просто реализовать абстрактную базу для перехода к вашей цели, но это возможно, я думаю. Но, вероятно, это не очень хорошая идея для будущей поддерживаемости проекта...
Django имеет внутренний механизм для распознавания модели, и вы можете динамически создавать типы, которые Django распознает как модель.
Статья в Django wiki может помочь вам, но будьте осторожны, это старая статья: https://code.djangoproject.com/wiki/DynamicModels
Надеюсь, это поможет вам
Удачи