Django超级经理通过ForeignKey拥有不需要的子类对象

时间:2016-03-23 04:24:04

标签: django inheritance django-models foreign-key-relationship

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

    def __str__(self):
        return self.name

class Son(Dad):
    dad = models.ForeignKey(Dad, related_name='sons')



>>> dad = Dad(name="Leonid")
>>> dad.save()
>>> Dad.objects.all()
[<Dad: Leonid>]
>>> son = Son(name='Jason')
>>> dad.sons.add(son)
>>> Dad.objects.all()
[<Dad: Leonid>, <Dad: Jason>]
>>> Son.objects.all()
[<Son: Jason>]

我不想让杰森反对爸爸的经理。我不想使用自定义管理器来过滤爸爸。是否有一种不包括子类对象的优雅方式。

1 个答案:

答案 0 :(得分:0)

您正在扩展Dad以创建Son模型,这在您的案例中是不正确的。目前,您的代码意味着每个Son也是Dad。将您的班级定义更改为:

class Son(models.Model):

您可以阅读有关model inheritanceforeign key relations的更多信息,这些概念似乎让您感到困惑。