加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

如何在Django中动态地向查询添加过滤器?

发布时间:2020-12-20 13:01:36 所属栏目:Python 来源:网络整理
导读:在我的viewSet中,我正在进行查询, queryset= Books.objects.all(); 现在从ajax调用我从UI获得我的过滤器值,即auther的年龄,性别等.总共将有5个过滤器. 现在我遇到的问题是如何向查询添加过滤器(只有那些具有任何值的过滤器). 我尝试的是我检查了单个过滤器值
在我的viewSet中,我正在进行查询,

queryset= Books.objects.all();

现在从ajax调用我从UI获得我的过滤器值,即auther的年龄,性别等.总共将有5个过滤器.

现在我遇到的问题是如何向查询添加过滤器(只有那些具有任何值的过滤器).

我尝试的是我检查了单个过滤器值并进行了查询,但这样就失败了,就像用户删除过滤器值或添加多个过滤器一样.
任何更好的建议如何实现这一目标?

解决方法

这是一个更通用的.如果它们作为GET参数传递,它将对您的查询集应用过滤器.如果您正在进行POST调用,只需更改代码中的名称即可.

import operator

def your_view(self,request,*args,**kwargs):
    # Here you list all your filter names
    filter_names = ('filter_one','filter_two','another_one',)

    queryset = Books.objects.all(); 
    filter_clauses = [Q(filter=request.GET[filter])
                      for filter in filter_names
                      if request.GET.get(filter)]
    if filter_clauses:
        queryset = queryset.filter(reduce(operator.and_,filter_clauses))

    # rest of your view

请注意,您可以在过滤器的名称中使用查找表达式.例如,如果要过滤价格低于或等于过滤器中指定价格的图书,则可以使用price__lte作为过滤器名称.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读