1
我创建了一个图书馆风格的搜索形式(您可以在其中添加新信息,进一步搜索,用连接词如AND,OR,AND NOT,OR NOT),允许他们建立的搜索语句在形式上,然后我试图变成一个Q过滤器。出于某种原因,我生成的过滤器似乎会返回一切,如果有OR的话。 (按'或其中'我的意思是用户选择或作为他们的声明)。Django的Q过滤器工作不正常
例子:我想创造问答过滤器,这样我会得到对象与NAME其数据域和测试作为其值或与材料作为其数据域和钢作为其值。
当我打印出来创建了Q,这是我得到:
(AND: (OR: (AND:), (AND: ('value__icontains', 'Test'), ('represents__exact', <DataField: 3-Name>)), (NOT (AND: ('value__iexact', 'Steel'), ('represents__exact', <DataField: 6-Materials>)))))
读这句话,好像它应该工作,但它不会做,似乎只是返回的一切。
这不正是我有,但它是一个什么样的形式,看起来像一个例子:
更新: 我改变了我的代码,这样所得到的Q语句是这个:
(OR: (AND: ('value__icontains', 'er'), ('represents__exact', <DataField: 3-Name>)), (NOT (AND: ('value__iexact', 'er'), ('represents__exact', <DataField: 5-Keywords>))))
或者,在展开的形式:
(OR:
(AND:
('value__icontains', 'er'), ('represents__exact', <DataField: 3-Name>)
),
(NOT
(AND:
('value__iexact', 'er'), ('represents__exact', <DataField: 5-Keywords>)
)
)
)
不过,下面的代码打印出来的一切在数据库中:
filtered = objects.filter(q)
print("Filtered: ", filtered)
的和没有第二个表达出现问题了? –
AND是一个二进制表达式。所以它需要2个表达式。不知道如何准确* * Django是处理代码,现在你的情况 – karthikr
我想我定你所描述的问题,但它仍然无法正常工作(见我的问题的更新) –