2009-10-22 4 views
9

J'essaye d'hériter le modèle sur mon site alimenté par Django afin d'adhérer à DRY. Mon but est d'utiliser une classe de base abstraite appelée BasicCompany pour fournir les informations communes pour trois classes enfants: Butcher, Baker, CandlestickMaker (ils sont situés dans leurs propres applications sous leurs noms respectifs).Résumé de l'héritage de la classe de base dans Django avec foreignkey

Chacune des classes enfants a besoin d'un nombre variable de choses comme des adresses e-mail, des numéros de téléphone, des URL, etc., allant de 0 à plus. Je veux donc une relation many-to-one/ForeignKey entre ces classes et la société à laquelle elles se réfèrent. Voici à peu près ce que j'imagine BasicCompany/models.py ressemblant à:

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. 

Ce que je ne sais pas comment faire hériter est EMAILADDRESS URL, PHONENUMBERS (etc.) dans les classes d'enfants. Peut-il être fait, et si oui, comment? Sinon, j'apprécierais vos conseils sur les solutions de contournement.

Répondre

6

Je suppose que vous serez mieux avec generic relations pour les liens, plutôt que d'essayer de lier tout à une classe de base. Les relations génériques vous permettent de lier un modèle tel que EmailAddress à n'importe quelle autre classe, ce qui semble correspondre à votre cas d'utilisation.

+0

Merci Daniel. J'avais regardé les types de contenu et les relations génériques hier, mais ça n'a pas vraiment cliqué. Je vais essayer maintenant et voir si cela résout le problème. –

Questions connexes