A herança permite reutilizar o código e criar modelos de dados mais limpos. Mas o Django oferece mais de uma maneira de herdar, portanto, certifique-se de conhecer as diferenças.
Herança de modelo é um recurso do Django ORM que permite aos desenvolvedores criar relacionamentos hierárquicos entre modelos de banco de dados. Ele permite a reutilização de código, extensibilidade e uma base de código mais limpa, aproveitando os princípios da programação orientada a objetos.
Esteja você criando um aplicativo da Web complexo ou trabalhando em um projeto menor, a herança de modelo pode oferecer benefícios significativos, como reduzir a redundância e garantir um comportamento consistente.
Tipos de herança de modelo em Django
O Django oferece suporte para três tipos de herança de modelo:
- Classes de base abstratas.
- Herança de várias tabelas.
- Modelos de proxy.
Cada um desses tipos de herança de modelo tem benefícios e você os usará para fins específicos.
Classes Base Abstratas
As classes base abstratas fornecem uma maneira de definir campos e métodos comuns que vários modelos podem herdar. Por exemplo, se você tiver dois modelos compartilhando campos semelhantes, poderá usar uma classe base abstrata para definir os campos semelhantes. Dê uma olhada neste exemplo:
aulaCliente(modelos. Modelo):
nome = modelos. CharField (max_length=50)
email = modelos. EmailField()
id_cliente = modelos. IntegerField()
aulaVendedor(modelos. Modelo):
nome = modelos. CharField (max_length=50)
email = modelos. EmailField()
vendedor_id = modelos. IntegerField()
O trecho de código acima define dois modelos Django: Cliente e Vendedor. Esses modelos compartilham dois campos comuns, ou seja, nome e e-mail. Para evitar essa redundância, você pode criar um modelo separado para manter os campos comuns no Cliente e Vendedor modelos e torná-lo abstrato.
aulaInformação de usuário(modelos. Modelo):
nome = modelos. CharField (max_length=50)
email = modelos. EmailField()
aulameta:
resumo = Verdadeiro
O trecho de código acima define um novo modelo e define o abstrato atribuir a Verdadeiro. Isso significa que o modelo será abstrato e o Django não criará uma tabela no banco de dados.
Você pode reescrever o Cliente e Vendedor modelos como este:
aulaCliente(Informação de usuário):
id_cliente = modelos. IntegerField()
aulaVendedor(Informação de usuário):
vendedor_id = modelos. IntegerField()
No trecho de código acima, o Cliente e vendedores os modelos herdam do Informação de usuário modelo em vez de modelos. Modelo.
Você pode visualizar seus modelos no painel de administração registrando-os em seu admin.py arquivo assim:
de .modelos importar Cliente, Vendedor
admin.site.register (Cliente)
admin.site.register (Vendedor)
Migre seus modos e inicie seu servidor de desenvolvimento executando o seguinte em um linha de comando:
python manage.py makemigrations \
&& python manage.py migrar \
&& python manage.py runserver
Navegue até seu site de administração e faça login com seus detalhes de superusuário. Você deve ver todos os três campos para cada modelo.
Neste exemplo, Django criou uma tabela para o Cliente e Vendedor modelos. Você pode ver que o Informação de usuário modelo não tem tabela, pois é abstrato.
Herança Multi-Tabela
Você pode usar a herança de várias tabelas quando o modelo pai também precisa existir como uma tabela no banco de dados ao lado do modelo filho.
Ao contrário da herança de classe base abstrata, em que o modelo pai não será uma tabela no banco de dados, a herança multitabela cria uma tabela para o modelo pai.
Na herança de várias tabelas, o modelo filho herda todos os campos e métodos de seu modelo pai e adiciona seus campos específicos. chaves estrangeiras ajudar a estabelecer o relacionamento modelo entre os modelos pai e filho.
Aqui está um exemplo de herança multi-tabela:
aulaPessoa(modelos. Modelo):
primeiro_nome = modelos. CharField (max_length=100)
sobrenome = modelos. CharField (max_length=100)defget_name(auto):
retornarf"{self.first_name}{self.last_name}"aulameta:
resumo = VerdadeiroaulaFuncionário(Pessoa):
id_funcionário = modelos. CharField (max_length=20)
departamento = modelos. CharField (max_length=100)
salário = modelos. FloatField()
dob = modelos. DataCampo()
aulaGerente(Funcionário):
título = modelos. CharField (max_length=100)
Este trecho de código define três modelos. O primeiro modelo, denominado Pessoa, é abstrato. Ele define apenas o nome e o sobrenome de uma pessoa.
O segundo modelo, denominado Funcionário, herda os campos de Pessoa mas define campos adicionais. O Funcionário modelo não é abstrato, então ele terá sua tabela no banco de dados.
O modelo final, denominado Gerente, herda os campos do Funcionário model e adiciona um campo chamado título.
A relação entre o Funcionário e Gerente modelos é chamado Herança Multi-Tabela. Migre seus modelos, registre-os em admin.py, inicie seu servidor e navegue até o painel de administração. Você deve ver duas tabelas criadas pelo Django.
Ao tentar adicionar um novo gerente, você notará que ele possui todos os campos do Funcionário modelo, bem como seu próprio campo personalizado.
Modelos de proxy
Um modelo proxy ajuda a criar um novo modelo que se estende de um modelo existente sem criar uma nova tabela de banco de dados. Nesse tipo de herança de modelo, o proxy e os modelos originais compartilharão a mesma tabela. Usando modelos de proxy, você pode fazer coisas como criar modelos personalizados e alterar gerenciadores padrão.
Você pode criar um modelo de proxy adicionando proxy=Verdadeiro no meta aula. Aqui está um exemplo:
aulaProxyModel(BaseModelo):
aulameta:
proxy = Verdadeiro
O uso típico de um modelo proxy é apropriado quando existe um modelo básico e há necessidade de criar uma versão especializada dele com funcionalidade adicional. Aqui está um exemplo básico:
aulaPublicar(modelos. Modelo):
título = modelos. CharField (max_length=30)
autor = modelos. CharField (max_length=30)def__str__(auto):
retornar self.titleaulaProxyPost(Publicar):
aulameta:
proxy = Verdadeiro
Este trecho de código define dois modelos: Publicar e Minha publicação. O Publicar model define dois campos para título e autor. O ProxyPost modelo herda do Publicar modelo.
Migre os modelos acima e adicione um novo post à tabela criada para o Publicar modelo.
Depois de adicionar a postagem, abra o postagens de proxy mesa. Você deve encontrar a postagem que adicionou ao Publicar mesa nele.
As alterações feitas nas postagens no postagens de proxy tabela afetará a postagem correspondente no Publicar mesa e vice-versa. Isso prova que eles realmente compartilham a mesma mesa.
Você pode modificar o str() método do modelo de proxy:
aulaProxyPost(Publicar):
aulameta:
proxy = Verdadeiro
pedido = ["título"]
def__str__(auto):
retornar auto.autor
Com esta modificação, um ProxyPost's a representação de string será seu autor, não o título. A ordem do modelo de proxy também será pelo título em vez do campo de ID padrão.
Ao usar modelos de proxy, você deve ter em mente que não pode adicionar campos personalizados ao seu modelo de proxy. O principal caso de uso de modelos de proxy é quando você deseja que um modelo suporte vários comportamentos.
Os modelos proxy ajudam a alterar o comportamento de um modelo existente sem modificar seus campos ou a estrutura subjacente da tabela do banco de dados.
Use herança de modelo para reutilização de código e estrutura organizacional
Ao utilizar as diferentes técnicas de herança de modelo, você pode facilmente criar código reutilizável e organizado para seu projeto.
A herança de modelo evita código redundante e melhora a capacidade de manutenção e escalabilidade de seu código. Também facilita a navegação no seu código, promovendo uma colaboração eficiente entre as equipes de desenvolvimento.
Além da herança de modelo, o Django oferece herança de modelo, que é uma ótima maneira de gerenciar e organizar modelos para seus projetos.