Criação de modelo dinâmico para múltiplas tabelas no Django
Para um banco de dados contendo inúmeras tabelas temporárias com esquemas compartilhados e nomes dinâmicos, a integração do Django apresenta desafios . No entanto, é possível usar uma função de fábrica para criar modelos com tabelas de banco de dados dinâmicas.
Gerenciamento de tabela de banco de dados dinâmico
A função de fábrica retorna um modelo com um banco de dados especificado mesa. Isso permite a vinculação dinâmica de dados com base em nomes de tabelas:
def getModel(db_table):
class MyClass(models.Model):
# Model definition goes here...
class Meta:
db_table = db_table
return MyClass
Você pode então instanciar o modelo com o nome da tabela específica:
newClass = getModel('29345794_table')
newClass.objects.filter(...)
Metaclasse para nomeação dinâmica de classes
Como o Django armazena em cache o atributo _meta da classe, uma metaclasse é necessária para modificar o nome da classe em tempo de execução:
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
Considerações Adicionais
Embora inicialmente considerada imutável, a tabela do banco de dados pode ser definida dinamicamente:
MyModel._meta.db_table = '10293847_table'
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3