使用外键在Django中抽象基类继承

时间:2009-10-22 18:03:47

标签: python django inheritance django-models abstract-class

我正在我的Django供电网站上尝试模型继承,以便遵守DRY。我的目标是使用一个名为BasicCompany的抽象基类来提供三个子类的公共信息:Butcher,Baker,CandlestickMaker(它们以各自的名称位于自己的应用程序中)。

每个子课程都需要可变数量的东西,如电子邮件地址,电话号码,URL等,数量从0到现在不等。所以我希望这些类与他们引用的公司之间存在多对一/ ForeignKey关系。这大概是我想象的BasicCompany / models.py看起来像:

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.

我不知道怎么做是将EmailAddress,URL,PhoneNumbers(等)继承到子类中。可以这样做,如果是,怎么做?如果没有,我将非常感谢您对解决方法的建议。

1 个答案:

答案 0 :(得分:6)

我怀疑使用generic relations获取链接会更好,而不是试图将所有内容绑定到基类。通用关系允许您将诸如EmailAddress之类的模型链接到任何其他类,这似乎非常适合您的用例。