2009-10-22 13 views
9

Próbuję dziedziczenia modelu na mojej stronie z Django w celu przestrzegania DRY. Moim celem jest wykorzystanie abstrakcyjnej klasy bazowej o nazwie BasicCompany w celu dostarczenia wspólnych informacji dla trzech klas potomnych: Butcher, Baker, CandlestickMaker (znajdują się one w swoich własnych aplikacjach pod ich nazwami).Streszczenie dziedziczenia klasy bazowej w Django z obcym kluczem

Każda z klas podrzędnych wymaga zmiennej liczby rzeczy, takich jak adresy e-mail, numery telefonów, adresy URL itp., Począwszy od 0 i więcej. Tak więc chcę relacji między wieloma klasami a firmą, do której się odnoszą. Oto z grubsza o co mi wyobrazić BasicCompany/models.py patrząc jak:

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. 

Co ja nie wiem jak to zrobić, to dziedziczą EMAILADDRESS adresów URL PhoneNumbers (ETC) w klasach potomnych. Czy można to zrobić, a jeśli tak, to w jaki sposób? Jeśli nie, byłbym wdzięczny za porady dotyczące obejścia.

Odpowiedz

6

Podejrzewam, że lepiej będzie dla Ciebie z linią generic relations niż próbować powiązać wszystko z klasą podstawową. Ogólne relacje umożliwiają powiązanie modelu, takiego jak EmailAddress z dowolną inną klasą, która wydaje się pasować do przypadku użycia.

+0

Dzięki Daniel. Wczoraj przyglądałem się typom treści i ogólnym relacjom, ale tak naprawdę nie klikałem. Zamierzam wypróbować to teraz i sprawdzić, czy to rozwiązuje problem. –

Powiązane problemy