我想在 Django 中进行两个查询集搜索
Posted
技术标签:
【中文标题】我想在 Django 中进行两个查询集搜索【英文标题】:I want to make two queryset search in Django 【发布时间】:2019-03-03 00:54:47 【问题描述】:使用 django.Filter() 搜索或过滤已保存在 django 中的帖子的详细信息。
使用 django 的 Q 在查询集中进行搜索。 使用复选框,以便此过滤器()在我的网页中添加过滤器 当 --
/?q=班加罗尔
我得到了正确的值
LOCATION BANGALORE PUNE
ujjwal
56789
hgjk@hgjhk.vds
bottle
bisleri
bangalore
Sept. 20, 2018, 3 p.m.
但是当我同时选中这两个复选框并执行搜索时:
?q=班加罗尔&q=浦那
如果您注意到上面的 url,它正在执行“&”(和)操作,而我想在搜索中显示任一值的数据。假设仅在数据库中保存了班加罗尔,但没有保存 pune,反之亦然。它什么也没显示。 ..
我的代码:
if query:
queryset = queryset.filter(
Q(Name__icontains = query) |
Q(Location__icontains= query) )
希望我能让你了解我的情况..
【问题讨论】:
试过getlist
? request.GET.getlist('q')
不...谢谢你的建议
【参考方案1】:
我认为你应该能够做这样的事情:
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
-将每个搜索词组合在一起。
【讨论】:
【参考方案2】:正如Django Document 所说,您可以使用此代码访问具有相同键的 query_params 列表:
>>> q = QueryDict('a=1&a=2&a=3')
>>> q.lists()
[('a', ['1', '2', '3'])]
也可以查看this 的回答。
【讨论】:
以上是关于我想在 Django 中进行两个查询集搜索的主要内容,如果未能解决你的问题,请参考以下文章
在 Django 中使用两个以不同方式格式化的查询集进行分页
Django Rest Framework - 自动注释查询集
在 django 中,我想在已经排序的查询集中获取特定元素及其几个邻居