我想在 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 查询集以保留单个顺序

Django Rest Framework - 自动注释查询集

在 django 中,我想在已经排序的查询集中获取特定元素及其几个邻居

如何在sphinx-django中使用两个模型进行单索引搜索

Django:保存旧的查询集以供将来比较