当前位置: 首页 > news >正文

Django4.0的快速查询以及分页

1. filter 方法

filter 是 Django ORM 中最常用的查询方法之一。它用来根据给定的条件过滤查询集并返回满足条件的对象。

articles = Article.objects.all()
# 使用 SearchFilter 进行搜索
search_param = request.query_params.get('search', None)
author_id = request.query_params.get('author_id', None)
# 模糊搜索
if search_param:
    articles = articles.filter(title__icontains=search_param)
#精确搜索id
if author_id:
     rticles = articles.filter(author_id=author_id)  # 按作者 ID 精确搜索

如果你有多个条件,也可以使用 filter 进行连接:

articles = Article.objects.filter(
    title__icontains='Django', 
    content__icontains='Python'
)

这会返回标题包含 "Django" 且内容包含 "Python" 的所有文章。

特点:
  • filter 会返回满足所有给定条件的结果。它相当于执行 SQL 查询中的 WHERE 子句。
  • 它会隐式使用 AND 逻辑来连接多个条件。

2. Q 对象

Q 对象是 Django 中用于创建复杂查询条件的工具。它允许你在查询中使用 OR 或 AND 逻辑,甚至可以动态地构建查询条件。Q 对象特别适用于需要使用 OR 逻辑或条件组合的场景。

from django.db.models import Q

articles = Article.objects.filter(
    Q(title__icontains='Django') | 
    Q(description__icontains='Django') | 
    Q(content__icontains='Django')
)
使用场景:
  • Q 适用于复杂查询,尤其是在需要使用 OR 或动态组合查询条件时。
  • 使用 Q 对象可以灵活地组合不同的查询条件,可以使用 & 表示 AND 逻辑,使用 | 表示 OR 逻辑。
  • filter 用于常见的、简单的过滤条件,适用于大部分常规查询,默认使用 AND 逻辑。
  • Q 对象用于构建更复杂的查询,特别是当你需要灵活的 OR 逻辑或者动态生成查询时。
 articles = Article.objects.all()
        # 使用 SearchFilter 进行搜索
        search_param = request.query_params.get('search', None)
        author_id = request.query_params.get('author_id', None)
        # # 模糊搜索
        # if search_param:
        #     articles = articles.filter(title__icontains=search_param)
        # #精确搜索id
        # if author_id:
        #     articles = articles.filter(author_id=author_id)  # 按作者 ID 精确搜索

        # 使用 Q 对象进行复杂查询
        query = Q()
        if search_param:
            query &= (Q(title__icontains=search_param) | Q(content__icontains=search_param))
            
        if author_id:
            query &= Q(author_id=author_id)

        # 应用查询条件
        articles = articles.filter(query)

http://www.dtcms.com/a/109948.html

相关文章:

  • Flink SQL-Client Kafka connector
  • Uni-app 项目 PDF 批注插件库在线版 API 示例教程
  • Ceph异地数据同步之-RBD异地同步复制(上)
  • 每日一题(小白)ASCLL娱乐篇5
  • ARM架构+CODESYS:解锁嵌入式边缘计算的实时控制新范式
  • MIT6.828 Lab3-2 Print a page table (easy)
  • 大数据学习(98)-数据治理
  • 预测分析(二):基于机器学习的数值预测
  • 【大模型基础_毛玉仁】6.3 知识检索
  • API接口调用
  • 通信算法之256: 无人机Remote ID(远程识别)
  • adc推荐,单通道,双极性采集
  • 最近常用 python 记录
  • 环境数据综合分析系统
  • 贤小二c#版Yolov5 yolov8 yolov10 yolov11自动标注工具 + 免python环境 GPU一键训练包
  • 贴片加工SMT厂核心工艺解析
  • 码界奇缘 Java 觉醒 第二章 变量迷城
  • 计算机网络-TCP的重传机制
  • 清晰易懂的 Flutter 开发环境搭建教程
  • java短连接,长连接
  • Linux命令-uniq
  • RAGFlow部署与使用介绍-深度文档理解和检索增强生成
  • 本地部署 Firecrawl 爬虫让 AI 知识库更丰满
  • Java创建对象和spring创建对象的过程和区别
  • AI赋能数据库管理“最后一公里”,融合架构重塑数据库承载成本效能——zCloud 6.7与zData X 3.3正式发布
  • MonkeyDev 如何创建一个root级级别的app,并执行root命令获取iphone设备序列号serialNumber(ios15.8)
  • 航电系统之承重与避障技术
  • “二分查找 + (必要时)前缀和” -- 处理 ’有序数组‘ 的区间问题汇总
  • 信息学奥赛一本通 1524:旅游航道
  • 胶铁一体化产品介绍