Django中的查询条件封装总结

基本查询

  • 简单相等查询

    python 复制代码
    User.objects.filter(name="jane")
  • 包含查询(类似于SQL中的LIKE '%value%')

    python 复制代码
    query = Q(name__contains="jane")
    # 或者忽略大小写的匹配
    query = Q(name__icontains="jane")

使用 Q 对象进行复杂查询

  • 组合多个条件(AND逻辑)

    python 复制代码
    from django.db.models import Q
    
    query = Q()
    if name:
        query &= Q(name__contains=name)
    if mobile:
        query &= Q(mobile__contains=mobile)
    query &= Q(type=2)  # 注意这里的更正
    
    users = User.objects.filter(query)
  • 或条件查询(OR逻辑)

    python 复制代码
    # 查找名字包含'jane'或者手机号码包含'138'的用户
    query = Q(name__contains='jane') | Q(mobile__contains='138')
    users = User.objects.filter(query)
  • 混合使用AND和OR逻辑

    python 复制代码
    # 查找名字包含'jane'且类型为2,或者手机号码包含'138'的用户
    query = (Q(name__contains='jane') & Q(type=2)) | Q(mobile__contains='138')
    users = User.objects.filter(query)

更多查询样例

  • 范围查询

    python 复制代码
    # 查找年龄在18到60之间的用户
    users = User.objects.filter(age__range=(18, 60))
  • 日期查询

    python 复制代码
    # 查找创建时间在特定日期之后的用户
    from datetime import date
    users = User.objects.filter(create_time__gte=date(2025, 3, 1))
  • 排除某些记录

    python 复制代码
    # 查找所有不是类型2的用户
    users = User.objects.exclude(type=2)
相关推荐
Cloud_.几秒前
Spring Boot整合Sa-Token极简指南
java·后端·springboot·登录校验
冬冬小圆帽29 分钟前
防止手机验证码被刷:React + TypeScript 与 Node.js + Express 的全面防御策略
前端·后端·react.js·typescript
陈明勇41 分钟前
chromem-go:Go 语言 RAG 应用的高效轻量级向量数据库
后端·go
掘金詹姆斯1 小时前
从Guava缓存源码提炼业务开发心法:Get方法暗藏的12个高并发设计哲学
后端
零零壹111 小时前
理解Akamai EdgeGrid认证在REST API中的应用
前端·后端
uhakadotcom1 小时前
DataWorks邮件外发完全指南:从零开始实现数据自动推送(2025最新实践)
后端·面试·github
啥都鼓捣的小yao1 小时前
Python手写机器学习的“线性回归”算法
python·算法·机器学习
qq_5470261791 小时前
Spring Boot 实现多数据源配置
java·spring boot·后端
魔术师卡颂1 小时前
一次排查 Cursor bug 的经历
前端·人工智能·后端
大霸王龙1 小时前
PyTorch中,将`DataLoader`加载的数据高效传输到GPU
人工智能·pytorch·python