Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django模型utils子类过滤器_Python_Django_Inheritance_Django Model Utils - Fatal编程技术网

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)
应该可以工作。