多次使用 `students = students.filter(...)`,这实际上会导致只有最后一个过滤器生效,因为每次赋值都会覆盖上一次的查询集

news2024/9/9 1:10:55
def student_list(request):
    students = Student.objects.all().order_by('id')
    search_query = request.GET.get('sel')  # 获取搜索表单的 'sel' 字段值
    if search_query:
        # //学号搜索
        students = students.filter(id__icontains=search_query)
        # //姓名搜索
        students = students.filter(name__icontains=search_query)
        # //性别搜索
        students = students.filter(sex__icontains=search_query)
        # //年龄搜索
        students = students.filter(age__icontains=search_query)
        # //班级搜索
        students = students.filter(student_class__icontains=search_query)
        # //爱好搜索
        students = students.filter(hobby__icontains=search_query)
        # //擅长搜索
        students = students.filter(goodat__icontains=search_query)
        # //住址搜索
        students = students.filter(home__icontains=search_query)
        # //地址搜索
        students = students.filter(address__icontains=search_query)
        # 根据需要修改搜索字段和搜索逻辑

        # 根据需要修改搜索字段和搜索逻辑
    return render(request, 'student/student_list.html', {'students': students})

 

 在 `student_list` 视图函数中,多次使用 `students = students.filter(...)`,这实际上会导致只有最后一个过滤器生效,因为每次赋值都会覆盖上一次的查询集。要实现多条件模糊搜索,您应该使用 `Q` 对象来组合查询条件。

以下是修改后的 `student_list` 视图函数示例,它使用 `Q` 对象来实现多字段的模糊搜索:

```python
from django.db.models import Q
from django.shortcuts import render
from .models import Student

def student_list(request):
    students = Student.objects.all().order_by('id')
    search_query = request.GET.get('sel')

    if search_query:
        # 使用 Q 对象来组合查询条件
        students = students.filter(
            Q(name__icontains=search_query) |  # 姓名搜索
            Q(sex__icontains=search_query) |    # 性别搜索
            Q(age__icontains=search_query) |    # 年龄搜索(假设年龄是字符串形式)
            Q(student_class__icontains=search_query) |  # 班级搜索
            Q(hobby__icontains=search_query) |  # 爱好搜索
            Q(goodat__icontains=search_query) |  # 擅长搜索
            Q(home__icontains=search_query) |    # 籍贯搜索
            Q(address__icontains=search_query)   # 地址搜索
        )

    return render(request, 'student/student_list.html', {'students': students})
```

请注意以下几点:

1. **Q 对象**:`Q` 对象来自 `django.db.models`,它允许您构建复杂的查询。

2. **位运算符**:`|` 是 Python 的位或运算符,在查询中相当于逻辑的 OR 操作。

3. **搜索字段**:确保搜索字段与模型中的字段名称一致。

4. **数据类型**:`age__icontains` 假设 `age` 字段是字符串类型。如果 `age` 是整数字段,使用 `icontains` 可能会导致问题,因为 `icontains` 是用于字符串的。对于整数字段,可以使用 `Q(age__iexact=search_query)`。

5. **搜索表单**:确保 HTML 表单的 `method` 属性设置为 `"get"`,并且有一个 `name="sel"` 的输入字段。

6. **模板**:确保模板正确地渲染了 `students` 列表。

7. **测试**:在应用这些更改后,进行测试以确保搜索功能按预期工作。

8. **错误处理**:如果搜索功能仍然不工作,检查浏览器控制台和 Django 服务器日志以查找错误信息。

使用这种方法,用户输入的搜索词将对所有指定的字段进行模糊匹配,返回包含搜索词的任何字段的记录。 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1958863.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【云原生】kubernetes弃用docker,containerd风华正茂,何以承载云原生?

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,…

JAVA基础 - 泛型

目录 一. 简介 二. 集合泛型 三. 自定义泛型 四. 自定义泛型类和普通类的区别 一. 简介 泛型是 Java 语言中一种强大的特性,它允许在定义类、接口和方法时使用类型参数,从而增加了代码的类型安全性和复用性。 类型安全性: 使用泛型可以…

leetcode日记(60)编辑距离

感觉这题不是按难度划分的而是按代码长度划分的…看了答案才知道怎么做,其实思路很简单,但是特别难想…… 意思是使用动态规划,依次计算由word1的前i个字母到word2的前j个字母要经历的最小变化数。 min D[i][j]min(D[i-1][j]1,D[i][j-1]1,D…

spring 中包自动扫描之 component-scan 解析

在 spring 中&#xff0c;为简化 bean 的配置&#xff0c;在 spring-context 模块下提供了包的自动扫描功能&#xff0c;将配置的包及其子包下的所有符合条件的类都注册到 BeanFactory 中。下面来看下具体是怎么实现的。 配置 <context:component-scan base-package"…

【MIT 6.5840(6.824)学习笔记】Raft

1 脑裂 许多容错系统使用一个单主节点来决定主副本。 MapReduce&#xff1a;由单主节点控制计算复制。GFS&#xff1a;主备复制数据&#xff0c;并由单主节点确定主拷贝的位置。VMware FT&#xff1a;主虚机和备份虚机之间复制指令&#xff0c;需要单点的Test-and-Set服务确认…

[0729] X-CMD 发布 v0.4.3:借助 fzf ,提升用户使用体验

目录 X-CMD 发布 v0.4.3&#x1f50e; ll&#x1f50e; jq&#x1f50e; yq&#x1f50e; man X-CMD 发布 v0.4.3 &#x1f50e; ll 新增 --fzf 子命令 该命令借助 fzf 为用户提供了一种高效查找文件和目录的相关信息的方法&#xff0c;类似于文件管理器。 # 使用 fzf 查找文…

AI智能名片O2O商城小程序源码在社区团购中的应用与红利深度探索

摘要&#xff1a;在数字化转型的浪潮中&#xff0c;社区团购以其独特的商业模式和强大的市场渗透力&#xff0c;成为新零售领域的一股不可忽视的力量。而AI智能名片O2O商城小程序源码&#xff0c;作为技术创新的集大成者&#xff0c;正逐步渗透并深刻改变着社区团购的运作模式和…

从零开始编写一个Chrome插件:详细教程

个人名片 🎓作者简介:java领域优质创作者 🌐个人主页:码农阿豪 📞工作室:新空间代码工作室(提供各种软件服务) 💌个人邮箱:[2435024119@qq.com] 📱个人微信:15279484656 🌐个人导航网站:www.forff.top 💡座右铭:总有人要赢。为什么不能是我呢? 专栏导…

科普文:抽屉合同/协议

抽屉协议是指一种在特定情境下&#xff0c;当事人之间私下签订的、不公开披露的协议。通常情况下&#xff0c;除了协议双方外&#xff0c;其他人并不知道这份协议的存在。这种协议在需要时会被拿出来&#xff0c;因为它已经过双方签字盖章&#xff0c;同样具有法律效应。 背景…

SN65MLVD080使用手册

8通道半双工M-LVDS线路收发器 特性 低压差分30欧姆至55欧姆线路驱动器和接收器&#xff0c;支持信号速率高达250 Mbps&#xff1b;时钟频率高达125 MHz 满足或超过M-LVDS标准TIA/EIA-899多点数据交换规范 受控驱动器输出电压转换时间&#xff0c;提高信号质量 -1V至3.4V共模…

【C++版本】protobuf与gRPC

文章目录 一、Protobuf二、安装以及使用protoc参考 一、Protobuf Google Protocol Buffers&#xff08;protobuf&#xff09;是一种语言中立、平台中立的序列化协议&#xff0c;旨在高效地将结构化数据进行序列化和反序列化。它主要用于通信协议、数据存储和其他需要高效编码和…

【CAN通讯系列5】CAN数据帧及其仲裁

在CAN通讯系列3-CAN通讯如何传递信号中&#xff0c;由于传递信号的分析需要&#xff0c;引出了CAN数据帧的ID&#xff0c;长度和数据段的概念&#xff0c;它们都与CAN协议帧相关。CAN协议帧有5种类型&#xff0c;如下表&#xff1a; 而我们当前使用到的是数据帧&#xff0c;故本…

【Qwen-Audio部署实战】Qwen-Audio-Chat模型之FastApi部署实战

系列篇章&#x1f4a5; No.文章1【Qwen部署实战】探索Qwen-7B-Chat&#xff1a;阿里云大型语言模型的对话实践2【Qwen2部署实战】Qwen2初体验&#xff1a;用Transformers打造智能聊天机器人3【Qwen2部署实战】探索Qwen2-7B&#xff1a;通过FastApi框架实现API的部署与调用4【Q…

10 BERT

目录 1 综述 1.1 BERT的核心思想 1.2 BERT的关键技术&#xff1a;预训练阶段 1.3 微调阶段 2 BERT的架构 2.1 输入处理 3. 特征选择/学习模块 BERT 的自注意力过程 4. 预训练任务&#xff1a;同时进行 4.1 Next Sentence Prediction (NSP) 4.2 Masked Language Model…

Url图标实现

Url图标实现 效果如下&#xff1a; 1.引入样式 <link rel"icon" href"favicon.ico"> favicon.ico和对应的html一般需要在同一个目录下&#xff08;同级别&#xff09;。 2.title是用来设置在url页签中显示的名称。 可能存在的问题&#xff1a; …

如何通过前端表格控件实现自动化报表?

背景 最近伙伴客户的项目经理遇见一个问题&#xff0c;他们在给甲方做自动化报表工具&#xff0c;项目已经基本做好了&#xff0c;但拿给最终甲方&#xff0c;业务人员不太买账&#xff0c;项目经理为此也是天天抓狂&#xff0c;没有想到合适的应对方案。 现阶段主要面临的问…

filament 初使用记录

安装初始化 一、环境准备 官网要的 我安装的 二、下载安装 安装laravel composer create-project --prefer-dist laravel/laravel 项目名称 10.*导入 filament composer require filament/filament注册 filament 管理面板 php artisan filament:install --panels初始化…

KubeSphere部署:(一)环境准备

本文介绍windows系统&#xff0c;安装wsl虚拟机&#xff08;ubuntu&#xff09;&#xff0c;并在ubruntu中配置连接私有harbor及阿里云镜像等。 在确定该方式前&#xff0c;博主也曾尝试过通过安装Docker Desktop的方式&#xff0c;但每次重启电脑之后&#xff0c;docker桌面端…

Photoshop 2023:创意无限的图像编辑神器

Photoshop 2023 是一款专为 Mac 和 Windows 系统设计的强大图像编辑软件&#xff0c;为专业设计师和业余爱好者提供了无与伦比的创作工具和功能。 一、强大的编辑工具 Photoshop 2023 拥有丰富的编辑工具&#xff0c;如选择工具、画笔工具、橡皮擦工具等。其选择工具能够精确…

Matlab编程资源库(14)常微分方程初值问题的数值解法

一、 龙格&#xff0d;库塔法简介 龙格-库塔法&#xff08;Runge-Kutta method&#xff09;是一种常用的数值解微分方程的方法&#xff0c;由德国数学家卡尔龙格&#xff08;Carl Runge&#xff09;和马丁威尔海尔姆库塔&#xff08;Martin Wilhelm Kutta&#xff09;在20世纪…