2

如何运行以下内容:

someQuerySet.filter(keyword='someKey')
someQuerySet.filter(keyword='someOtherKey')

InvalidQueryError: Duplicate query conditions每当我尝试这样做时,我都会得到。我知道可以按值列表进行过滤,但是现在,我需要进行单独的过滤器。

稍后编辑:我实际上正在使用:

someQuerySet.filter(keyword__ne='someKey')
someQuerySet.filter(keyword__ne='someOtherKey')
4

2 回答 2

6

您可以像这样构建 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'

我是凭记忆做的,所以如果这不起作用,请告诉我,我会查看我过去的一些代码。

于 2013-09-18T13:13:07.623 回答
3

错误的原因是因为默认情况下查询参数 AND。所以你在问keyword="SomeKey" AND keyword="SomeOtherKey"哪个永远不可能是真的。

您可以使用Q对象或喜欢:http ://docs.mongoengine.org/en/latest/guide/querying.html#advanced-queries或执行$in值与列表中的任何匹配的操作,例如:keyword__in=["SomeKey", "SomeOtherKey"]

于 2013-09-18T13:23:43.003 回答