2009-10-22 23 views
9

Django tarafından desteklenen sitemde DRY'ye uymak için model mirasımı deniyorum. Amacım, üç çocuk sınıfı için ortak bilgi sağlamak için BasicCompany adı verilen soyut bir temel sınıf kullanmaktır: Kasap, Baker, CandlestickMaker (kendi uygulamalarında kendi adlarına göre bulunurlar).Django'da yabancı temel miras mı?

Çocuk sınıflarının her biri, e-posta adresleri, telefon numaraları, URL'ler vb. Gibi sayıları 0 ve üstü arasında değişen değişkenlere ihtiyaç duyar. Bu yüzden bu sınıflar ve başvurdukları şirket arasında çoktan-bir/ForeignKey ilişkisi istiyorum. Ben nasıl bilmiyorum ne

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. 

çocuk sınıfa EmailAddress, URL'ler, PHONENUMBERS (vs) miras olduğunu: İşte benzeyen BasicCompany/models.py hayal kabaca ne. Yapılabilir mi, eğer öyleyse, nasıl? Aksi takdirde, geçici çözüm önerilerinden memnun olurum.

cevap

6

Bağlantılar için her şey bir temel sınıfa bağlanmaya çalışmak yerine generic relations ile daha iyi olacağından şüpheleniyorum. Genel ilişkiler, EmailAddress gibi bir modeli, kullanım durumunuza iyi bir şekilde benzeyen başka bir sınıfa bağlamanızı sağlar.

+0

Teşekkürler Daniel. Dün içerik ve genel ilişkilere bakmıştım, ama gerçekten tıklamadı. Şimdi deneyeceğim ve sorunu çözüp çözmediğini göreceğim. –

İlgili konular