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
我想我定你所描述的問題,但它仍然無法正常工作(見我的問題的更新) –