Django 超类的管理器通过外键有不需要的子类对象


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>]

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

您正在扩展Dad以创建Son模型,这在您的情况下是不正确的。目前您的代码意味着每个Son也是一个Dad。将类定义更改为:

class Son(models.Model):

您可以阅读有关模型继承和外键关系的更多信息,它们是您似乎混淆的不同概念。

最新更新