Создание динамической модели для нескольких таблиц в Django
Для базы данных, содержащей множество временных таблиц с общими схемами и динамическими именами, интеграция Django представляет проблемы . Однако можно использовать фабричную функцию для создания моделей с динамическими таблицами базы данных.
Динамическое управление таблицами базы данных
Фабрика возвращает модель с указанной базой данных стол. Это позволяет осуществлять динамическую привязку данных на основе имен таблиц:
def getModel(db_table):
class MyClass(models.Model):
# Model definition goes here...
class Meta:
db_table = db_table
return MyClass
Затем вы можете создать экземпляр модели с конкретным именем таблицы:
newClass = getModel('29345794_table')
newClass.objects.filter(...)
Метакласс для динамического именования классов
Поскольку Django кэширует атрибут _meta класса, для изменения имени класса необходим метакласс во время выполнения:
def getModel(db_table):
class MyClassMetaclass(models.base.ModelBase):
def __new__(cls, name, bases, attrs):
name = db_table
return models.base.ModelBase.__new__(cls, name, bases, attrs)
class MyClass(models.Model):
__metaclass__ = MyClassMetaclass
class Meta:
db_table = db_table
return MyClass
Дополнительные соображения
Хотя изначально таблица базы данных считалась неизменной, ее можно устанавливать динамически:
MyModel._meta.db_table = '10293847_table'
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3