【问题标题】:I want to make two queryset search in Django我想在 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')
  • 不...谢谢你的建议

标签: django filter 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 的回答。

    【讨论】:

      猜你喜欢
      • 2015-07-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-21
      • 2014-04-12
      • 2015-06-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多