2009-10-22 17 views
9

Estoy intentando heredar el modelo en mi sitio con Django para cumplir con DRY. Mi objetivo es utilizar una clase base abstracta llamada BasicCompany para proporcionar la información común para tres clases secundarias: Butcher, Baker, CandlestickMaker (están ubicadas en sus propias aplicaciones con sus respectivos nombres).Herencia abstracta de la clase base en Django con la clave externa

Cada una de las clases secundarias necesita una cantidad variable de cosas como direcciones de correo electrónico, números de teléfono, URL, etc., cuyo número va desde 0 en adelante. Así que quiero una relación de muchos a uno/ForeignKey entre estas clases y la empresa a la que se refieren. Esto es más o menos lo que me imagino BasicCompany/models.py mirando como:

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. 

Lo que no sé hacer es heredar EMAILADDRESS, URLs, números telefónicos (etc) en las clases hijas. ¿Se puede hacer, y si es así, cómo? De lo contrario, agradecería su consejo sobre soluciones temporales.

Respuesta

6

Sospecho que estarás mejor con generic relations para los enlaces, en lugar de tratar de atar todo a una clase base. Las relaciones genéricas le permiten vincular un modelo como EmailAddress a cualquier otra clase, lo que parece encajar con su caso de uso.

+0

Gracias Daniel. Estuve mirando tipos de contenido y relaciones genéricas ayer, pero realmente no hizo clic. Voy a probarlo ahora y ver si resuelve el problema. –

Cuestiones relacionadas