如何运行以下内容:
someQuerySet.filter(keyword='someKey')
someQuerySet.filter(keyword='someOtherKey')
每当我尝试这样做时,我都会InvalidQueryError: Duplicate query conditions
。我知道可以按值列表进行过滤,但是现在,我需要进行单独的过滤。
稍后编辑: 我实际上在用:
someQuerySet.filter(keyword__ne='someKey')
someQuerySet.filter(keyword__ne='someOtherKey')
答案 0 :(得分:4)
你可以建立像这样的Q对象:
from django.db.models import Q
filters = Q(keyword='someKey')
…
filters = filters | Q(keyword='someOtherKey')
someQuerySet.filter(filters)
这基本上会创建一个WHERE
子句,如下所示:WHERE keyword = 'someKey' OR keyword = 'someOtherKey'
我是从记忆中做到这一点,所以如果这不起作用,请告诉我,我会研究一些过去的代码。
答案 1 :(得分:3)
错误的原因是因为默认情况下查询参数为AND。所以你要求的keyword="SomeKey" AND keyword="SomeOtherKey"
永远不会是真的。
您可以使用Q
个对象:http://docs.mongoengine.org/en/latest/guide/querying.html#advanced-queries或执行$in
,其中值与列表中的任何内容匹配,例如:keyword__in=["SomeKey", "SomeOtherKey"]