這是一個django-filter特定於應用程序的問題。改變Django過濾默認行爲
有沒有人試圖引入過濾條件來根據條件進行查詢?
讓我舉一個例子:
假設我們有一個Product
模型。它可以根據其name
和price
進行過濾。
默認django-filter
的行爲是,因爲我們使用更多的過濾器並將它們鏈接在一起,所以它們使用AND
語句(它縮小了搜索範圍)過濾數據。
我想改變這種行爲並添加一個ChoiceFilter,比如說有兩個選項:AND
以及OR
。從這一點來看,過濾器應該根據用戶選擇的內容來工作。
例如,如果用戶查詢含有name__startswith="Juice"
OR
price__lte=10.00
的產品,則應列出名稱以Juice
開頭的所有產品以及價格低於10.00
的產品。
Django-filter
文件說,該過濾器可以帶參數:
action
An optional callable that tells the filter how to handle the queryset. It recieves a
QuerySet and the value to filter on and should return a Queryset that is filtered
appropriately.
這似乎是我所期待的,但該文檔沒有任何進一步的解釋。請提出建議?
@EDIT:
這是views.py
:
def product_list(request):
f = ProductFilter(request.GET, queryset=Product.objects.all())
return render_to_response('my_app/template.html', {'filter': f})
感謝您對此問題的關注。你能給出一個快速代碼的例子嗎?我想我不知道如何將這個'[AND | OR]'邏輯類型用作字段。 – nutship
@shipship我會用自己的代碼更新我的帖子(因爲我也對這個問題感興趣)。 '[AND | OR]'表示爲無線電或選擇字段,只要將其視爲典型的過濾字段並使用它的值構造AND或OR查詢集。 – mariodev
謝謝。啊,所以基本上我們構造一個查詢集是'views.py',然後傳遞給''queryset'變量(而不是默認的'Product.objects.all()')? – nutship