Django中带外键的抽象基类继承

9 投票
1 回答
2940 浏览
提问于 2025-04-15 15:17

我正在我的Django网站上尝试模型继承,以遵循DRY原则(不要重复自己)。我的目标是创建一个叫做BasicCompany的抽象基类,用来提供三个子类(屠夫、面包师和蜡烛制造商)共有的信息。这些子类各自位于不同的应用中。

每个子类需要的东西,比如电子邮件地址、电话号码、网址等,数量不固定,可能从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.

我不知道怎么把电子邮件地址、网址、电话号码(等等)继承到子类中。这能做到吗?如果可以,应该怎么做?如果不行,我也希望能得到一些替代方案的建议。

1 个回答

6

我觉得你用通用关系来处理链接会更好,而不是把所有东西都绑在一个基类上。通用关系可以让你把像EmailAddress这样的模型链接到任何其他类,这样做似乎更适合你的需求。

撰写回答