这是一个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