Django - 外来抽象模型 - 检索相关元素

时间:2014-02-26 10:56:36

标签: python django

让我们说,举个例子,我有几个模型如下:

class People(models.Model):
    name = models.CharField()

class Job(models.Model):
    salary = models.IntegerField()
    employee = models.ForeignKey(People)        

    class Meta:
        abstract : True

class Artist(Job):
    # pass

class Vet(Job):
    # pass

class Doctor(Job):
    # pass
    class Meta:
        abstract : True

class Surgeon(Doctor):
    # pass

现在,让我们说,我想让一个人完成所有工作。

我想做点什么

Mister_Jack = People.objects.get(pk=1)
jobs = Mister_Jack.job_set.all()

但它不起作用,因为Job是抽象的,并且“job_set”关系不存在。有一个“artist_set”,一个“surgeon_set”等。但我不想列出所有可能的工作。

最好的方法是什么?

注意:人与人工作模型只是一个例子来说明pb。

1 个答案:

答案 0 :(得分:2)

您必须了解抽象模型的工作原理。预期用例是将子类的公共字段保存在一个位置。抽象模型类没有相应的数据库表。

这意味着Django无法在PeopleJob之间建立任何关系,因为这种关系在现实中并不存在。其他3个子类型模型存在于数据库中,但它们之间没有链接,因此Django无法帮助您解决这个问题。 为了获得所有可能的工作,Django无论如何都必须对每个表进行单独的查询。

您需要更改Job模型不是抽象的,或者加入模型并使用一些type字段来区分它们。根据我的经验,我发现模型继承非常繁琐,并且经常决定只使用一个更大的表,代价是一些字段总是空的。