При динамическом создании таблицы 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

Надеюсь, это поможет вам

Удачи

Вернуться на верх