Django super class 的经理通过 ForeignKey 有不需要的 objects of child class

Django super class's manager has unwanted objects of child class via ForeignKey

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

我不想让 Jason object 成为爸爸的经理。我不想使用自定义管理器来只过滤爸爸。有没有一种优雅的方法不包括 child class.

的 objects

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

class Son(models.Model):

您可以阅读更多关于 model inheritance and foreign key relations 的内容,这些是您似乎混淆的不同概念。