我想在Django中进行两个queryset搜索

时间:2018-09-27 07:10:15

标签: django filter q

使用django.Filter()搜索或过滤已保存在django中的帖子的详细信息。

使用django的Q在queryset中进行搜索。 使用复选框,以便此filter()在我的网页中添加一个过滤器 什么时候-

  

/?q =班加罗尔

我得到的正确值为

LOCATION  BANGALORE  PUNE 
ujjwal
56789
hgjk@hgjhk.vds
bottle
bisleri
bangalore
Sept. 20, 2018, 3 p.m.

但是当我同时选中两个复选框并执行搜索时:

  

?q =班加罗尔&q =浦那

如果您注意到上面的url,它正在执行“&”(和)运算,而我想在搜索中显示任意值的数据。假设仅在数据库中保存班加罗尔,但不保存,反之亦然。它什么也没显示。 ..

我的代码:

if query:
   queryset = queryset.filter(
   Q(Name__icontains = query) |      
   Q(Location__icontains= query) ) 

希望我能使您了解我的情况。

2 个答案:

答案 0 :(得分:0)

正如Django Document所说,您可以使用以下代码访问具有相同键的query_params列表:

>>> q = QueryDict('a=1&a=2&a=3')
>>> q.lists()
[('a', ['1', '2', '3'])]

也结帐了this答案。

答案 1 :(得分:0)

我认为您应该可以执行以下操作:

from functools import reduce

query = request.GET.getlist('q')

queryset = queryset.filter(
    reduce(lambda x, y: x | y,
           [Q(Name__icontains=q) | Q(Location__icontains=q) for q in query]
    )
)

这将建立一个Q对象,or-将每个搜索词放在一起。