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)
我正在使用 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)