Django-model-utils 按子类过滤

Django-model-utils Filter By Subclass

我正在使用 django-model-utils 继承管理器来查询具有多重 table 继承的数据模型,它大部分工作得很好!当我想要 .select_subclasses() 但也过滤特定子 class 时,效果不佳。例如:

class Salad:
    ...

class Vegetable:
    salad = models.ForeignKey(Salad)
    ...

class Cucumber(Vegetable):
    ...

class Carrot(Vegetable):
    ...

我希望能够仅获取与特定 Salad 相关的所有 Cucumber 对象,而不需要任何 Carrot 对象。不幸的是,文档似乎没有解释这一点。我最好的选择是在我保存任何 Vegetable 对象时设置的 Vegetable class 上创建一个 type 字段,然后可用于 "regular" 过滤?提前致谢!

您可以使用 .select_subclasses(Cucumber),它将 return Cucumber 个对象,其余的作为 Vegetable 个对象。您稍后可以使用 isinstance

过滤掉它

如果您只想过滤 Cucumber 个对象,您可以这样做:

Vegetable.objects.exclude(cucumber__isnull=True)