Python Django模型utils子类过滤器
我正在使用继承管理器查询一个具有多表继承的数据模型,它通常非常有效!当我想Python Django模型utils子类过滤器,python,django,inheritance,django-model-utils,Python,Django,Inheritance,Django Model Utils,我正在使用继承管理器查询一个具有多表继承的数据模型,它通常非常有效!当我想时,效果不好。选择子类(),但也要筛选特定的子类。例如: class Salad: ... class Vegetable: salad = models.ForeignKey(Salad) ... class Cucumber(Vegetable): ... class Carrot(Vegetable): ... 我希望能够只获取与特定沙拉相关的所有cumber对象,而不
时,效果不好。选择子类()
,但也要筛选特定的子类。例如:
class Salad:
...
class Vegetable:
salad = models.ForeignKey(Salad)
...
class Cucumber(Vegetable):
...
class Carrot(Vegetable):
...
我希望能够只获取与特定
沙拉
相关的所有cumber
对象,而不获取任何Carrot
对象。不幸的是,这些文件似乎没有解释这一点。在保存任何可用于“常规”筛选的蔬菜对象时,我设置的蔬菜
类上创建类型
字段的最佳选项是什么?提前谢谢 您可以使用。选择子类(Cucumber)
,它将返回Cucumber
对象,其余作为蔬菜
对象。您可以稍后使用isinstance
将其过滤掉,如果您只想过滤cumber
对象,您可以执行以下操作:
Vegetable.objects.exclude(cucumber__isnull=True)
不幸的是,这并不能真正回答问题。因为可能有很多Planet对象,所以在查询时进行过滤比在查询后进行过滤要高效得多。这可能是可行的,但当有许多类可能扩展Planet时,这不是一个非常可伸缩的解决方案。之后创建的任何扩展Planet的类都将“破坏”依赖于
cucumber\uu isnull=True的过滤的任何现有查询。你能想出另一个选择吗?如果你创建了新的类,为什么要中断这个过程呢?哦!我想我误解了。我很快就给你打一针-谢谢你!这很有效。标记为正确答案。与此相关的是,您能想出一种方法,不仅过滤特定子类,而且过滤同一查询中该特定子类上的字段吗?例如,如果我只想要长度大于12厘米的cumber
对象,谢谢<代码>plant.objects.exclude(cucumber\uu isnull=True)。过滤器(cucumber\uu length\uu gte=12)
应该可以工作。