herança de classe base abstrata em Django com chave estrangeira
-
05-07-2019 - |
Pergunta
Eu estou tentando herança modelo no meu Django powered local, a fim de aderir a DRY. Meu objetivo é usar uma classe base abstrata chamada BasicCompany para fornecer a informação comum para três classes filhas:. Açougue, padaria, CandlestickMaker (eles estão localizados em seus próprios aplicativos em seus respectivos nomes)
Cada uma das classes criança tem uma necessidade de um número variável de coisas como endereços de email, números de telefone, URLs, etc, que variam em número de 0 e para cima. Então, eu quero a / ForeignKey relacionamento muitos-para-um entre essas classes e a empresa a que se referem. Aqui é mais ou menos o que eu imagino BasicCompany / models.py parecendo:
from django.contrib.auth.models import User
from django.db import models
class BasicCompany(models.Models)
owner = models.ForeignKey(User)
name = models.CharField()
street_address = models.CharField()
#etc...
class Meta:
abstract = True
class EmailAddress(models.model)
email = models.EmailField()
basiccompany = models.ForeignKey(BasicCompany, related_name="email_addresses")
#etc for URLs, PhoneNumbers, PaymentTypes.
O que eu não sei como fazer é herdar emailAddress, URLs, phoneNumbers (etc) para as classes filho. isso pode ser feito, e se sim, como? Se não, eu gostaria de receber seus conselhos sobre soluções alternativas.
Solução
Eu suspeito que você vai ser melhor com relações genéricas para os links, em vez de tentar amarrar tudo a uma classe base. relações genéricas permitem que você vincular um modelo, como EmailAddress a qualquer outra classe, o que parece ser um bom ajuste com o seu caso de uso.