Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何为从下拉列表中选择的多个值编写django过滤器查询?

如何为从下拉列表中选择的多个值编写django过滤器查询?
EN

Stack Overflow用户
提问于 2019-07-04 22:03:28
回答 3查看 4.3K关注 0票数 2

我编写了一个视图函数,根据某些参数搜索/过滤django中的数据。在字段、类别和位置中,用户可以选择多个选项进行搜索。

我的意见功能如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def search(request):

    queryset_list = Influencer.objects.order_by('-followers').distinct().values('id',
                                                                'full_name','username','photo','email_id','location_city','categories__name','website')

    # Username
    if 'username' in request.GET:
        username = request.GET['username']
        if username:
            queryset_list = queryset_list.filter(username__icontains=username)

    #Full Name
    if 'fullname' in request.GET:
        fullname = request.GET['fullname']
        if fullname:
            queryset_list = queryset_list.filter(full_name__icontains=fullname)

    # Location
    if 'location' in request.GET:
        location = request.GET['location']
        for i in location:

            queryset_list = queryset_list.filter(location_city__icontains=i)

    # Categories
    if 'categories' in request.GET:
        categories = request.GET['categories']
        if categories:
            queryset_list = queryset_list.filter(categories__name__iexact=categories)

搜索函数应该返回进行搜索的所有类别和位置的数据。例如,如果搜索地点是德里和孟买,那么它应该返回所有的影响者,他们的位置是德里或孟买,同样也是类别。

搜索功能对于单个值来说是完美的,但是对于多个值则不起作用。例如,如果在位置类别中发送德里,则返回正确的结果,但如果选择德里,则只读取第一个值,即德里,并相应地应用过滤器。

如何修改搜索查询以使其正确工作?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-07-04 23:23:00

我认为最简单的方法是这样使用问:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 from django.db.models import Q
    q = request.GET.get('q')
    if q:
    queryset_list = queryset_list.filter(Q(username__icontains=q)|Q(full_name__icontains=q)|
    Q(location_city__icontains=q)|Q(categories__name__iexact=q))
    return render(....
    else:
        messages.info(request,'no results found for {}',format(q))

在模板中,在搜索表单中使用name=q

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  <form  action="{% url 'your search action' %}">
     <input type="text" name="q">
     <input type='submit' value='Search'>
   </form>

您可以像这样将all_queries与解决方案组合在一起:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
all_queries = username_queryset_list|fullname_queryset_list|location_queryset_list|
categories_queryset_list
票数 2
EN

Stack Overflow用户

发布于 2019-07-04 22:15:03

你试过为此使用django-filterset吗?

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class InfluencerFilter(filters.FilterSet):
username = filters.CharFilter(name='username', lookup_expr='iexact')
fullname = filters.CharFilter(name='fullname', lookup_expr='iexact')
location = filters.NumberFilter(name='location', lookup_expr='exact')
categories = filters.CharFilter(name='categories', lookup_expr='exact')


class Meta:
    model = Influencer
    fields = ['username','fullname','location','categories']

然后,在您的视图中,可以使用以下方法调用此筛选器:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
filter_backends = (filters.DjangoFilterBackend,)
filter_class = InfluencerFilter

这将避免所有累赘和冗余的if语句,并且只对可用的查询参数工作,而忽略其余的查询参数。

票数 0
EN

Stack Overflow用户

发布于 2019-07-04 22:20:24

这就是我如何在我的帐户上进行搜索:可能的搜索条件是自由文本(search_value),从选择框中选择组(sel_group),复选框仅活动的(chk_active)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    def post(self, request, *args, **kwargs):
        search_value = request.POST.get('searchValue', None)
        sel_group = request.POST.get('selGroup', 'ALL')
        chk_active = request.POST.get('chkActive', 0)

        filters = Q()
        if chk_active == '1':
            filters = filters & Q(is_active=True)
        if sel_group != 'ALL':
            filters = filters & Q(involvements__group__pk=sel_group)

        search_value = None if (search_value == '' or len(search_value) < 3) else search_value
        if search_value is not None:
            filters = filters & Q(last_name__icontains=search_value) | Q(first_name__icontains=search_value) | Q(email__icontains=search_value)

        users = get_user_model().objects.filter(filters)

        context = self.get_context_data(object_list=users)
        return render(request, template_name=self.template_name, context=context)

希望这会有所帮助;)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56897321

复制
相关文章
解惑 | 为什么我根据时间戳获得的offset为空呢?
最近有一个需求,要查询某一时间戳对应的offset值,于是就想到了使用 ./bin/kafka-run-class.sh kafka.tools.GetOffsetShell --time <timestamp> ,但是我在测试的时候,发现有的时间戳会获取不到offset,是空。但是明明指定的时间戳有上报数据,肯定有对应的 offset 的。于是就谷歌,找到了这篇帖子:
create17
2020/09/24
2.8K0
dropdownlist控件的几个属性selectedIndex、selectedItem、selectedValue、selectedItem.Text、selectedItem.value的区别…
1. selectedIndex——指的是dropdownlist中选项的索引,为int,从0开始,可读可写
全栈程序员站长
2022/11/03
8230
dropdownlist控件的几个属性selectedIndex、selectedItem、selectedValue、selectedItem.Text、selectedItem.value的区别…
【我们一起写框架】MVVM的WPF框架(三)—数据控件
这世上,没人能一次性写出完美无缺的框架;因为,任何一个框架都需要项目的淬炼,然后才能升华,趋近完美。
Kiba518
2018/09/28
2.4K0
【我们一起写框架】MVVM的WPF框架(三)—数据控件
【愚公系列】2023年09月 WPF控件专题 ComboBox控件详解
WPF控件是Windows Presentation Foundation(WPF)中的基本用户界面元素。它们是可视化对象,可以用来创建各种用户界面。WPF控件可以分为两类:原生控件和自定义控件。
愚公搬代码
2023/09/25
1.2K0
UrlReferrer为空的问题?
官方解释:获取有关客户端上次请求的 URL 的信息,该请求链接到当前的 URL。 1.也就是说,如果用Request.Redirect之后,再用Request.UrlReferrer是得不到前一个页面的链接的,因为这不是客户端的请求。 2.既然服务端不行,那换个思路:在客户端用js导航如何?比如下面这样 A.aspx上用window.location='B.aspx' 但实践证明在B.aspx上用Request.UrlReferrer仍然为空,即js导航也不行! 3.用A链接试一下 A.aspx上写一段ht
菩提树下的杨过
2018/01/23
2.4K0
jq 判断是否为空,为空隐藏指定 div
<style>.mydiv{ width:300px; height:300px; background:red;}</style> <div class="mydiv">     <div class="content">          这是一句话,删除的话会让 mydiv display:none;          </div> </div> <script src="https://lib.baomitu.com/jquery/3.4.1/jquery.min.js"></script> <sc
Savalone
2020/02/11
7.1K0
java判断空对象为空_Java判断对象是否为空(包括null ,””)的方法[通俗易懂]
public static boolean isEmpty(Object obj)
全栈程序员站长
2022/06/25
7K0
C#自定义泛型类绑定ComboBox控件
C# WinForm ComboBox 自定义数据项 (ComboBoxItem )
跟着阿笨一起玩NET
2018/09/18
1.6K0
为什么我不建议你用去 “ ! = null " 做判空?
最终,项目中会存在大量判空代码,多么丑陋繁冗!如何避免这种情况?我们是否滥用了判空呢?
用户9239674
2022/01/22
1K0
silverlight中如何得到ComboBox的选中值(SelectedValue)?
用惯了Asp.Net中的ComboBox和ListBox,想当然的以为SL/Winform/WPF中的ComboBox也应该有类似SelectedValue的属性,但是结果很遗憾,木有! 不过,这个问
菩提树下的杨过
2018/01/23
1.3K0
IOS数组为空的处理
某些情况下,后台可能由于各种原因,对某个字段返回了null值,这时我们取到的就是[NSNull null]这样一个对象,再比如说,后台可能对某一个数据取值,但取到了0个,这时返回的是一个空组,我们取到的就是@[],空组。 取到的array是一个NSNull对象。 NSNull是一个特殊的类,它和nil一样,也代表空值,但二者有区别,NSNull不接收NSArray的那些方法,它只有一个类方法: 因此判断数组是否为空,需要对各种情况都进行判断。 比如这种情况: ( "<null>", "<null>",
rectinajh
2018/05/17
3.4K0
python判断是否为空_python 判断对象是否为空
在实际的工作当中,我们难免要与空值打交道,相信不少初学者都会写出下面的代码:if a is None:
全栈程序员站长
2022/07/01
10.5K0
win10 uwp 相机的分辨率设置方法
在 UWP 中可以使用 WinRT 提供的 Win10 特有的 API 用来捕获摄像机的内容,支持很多格式的硬件解码,性能会比 Win32 好特别多。我使用了 UWP 版本的和 WPF 基于 DirectShow 的版本进行性能对比
林德熙
2021/01/04
1.4K0
java 对象为空判断_java中判断对象是否为空的方法
首先,直接使用 object == null 去判断,对象为null的时候返回true,不为null的时候返回false。然后,在object != null 为true的情况下,进一步去判断对象的所有属性是否为null。
全栈程序员站长
2022/08/15
11.5K0
java 对象为空判断_java中判断对象是否为空的方法
java如何判断对象为空_java对象如何判断是否为空
在实际书写代码的时候,经常会因为对象为空,而抛出空指针异常java.lang.NullPointerException。
全栈程序员站长
2022/06/25
13.4K0
java如何判断对象为空_java对象如何判断是否为空
007 C# Word批量转Pdf
this.comboBox1.SelectedItem.ToString()是指comboBox1选取下拉列表内容。
职场编码
2020/05/30
1.2K0
007 C# Word批量转Pdf
WPF 省市县3级联动
请看前台代码,最重要的是通过省选择的元素来作为下一级的数据,于是选择第一个修改时,就会自动联动
林德熙
2022/08/04
1.1K0
WPF 省市县3级联动
请看前台代码,最重要的是通过省选择的元素来作为下一级的数据,于是选择第一个修改时,就会自动联动
林德熙
2018/09/19
2.1K0
vue 对象判断为空_Vue中可用的判断对象是否为空的方法
vue有两个方法可用 1. JSON.stringify(evtValue)=='{}’ 2. Object.keys(xxx).length==0 js判断对象是否为空对象的几种方法 1.将json对象转化为json字符串,再判断该字符串是否为”{}” var data = {}; var b = (JSON.stringify(data) == “{}”); alert(b);//true 2.for in 循环判断 var obj = {}; var b =…
全栈程序员站长
2022/08/12
6.2K0
JavaScript中为空判断
摘要总结:本文介绍了JavaScript中为空判断的不同情况,包括判断字符串是否为空、变量是否被定义和初始化过。通过这些判断,可以帮助开发人员编写更加健壮的代码。
林老师带你学编程
2018/01/03
3.9K0

相似问题

C++中与内存管理相关的查询

40

从设计模式获取与malloc相关的错误: malloc / free /malloc/ free

21

与C++中的指针相关

20

c++相关查询中的类原型

11

与活动相关的查询

23
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文