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)
相关推荐
北海道浪子2 分钟前
[免费送$1000]ClaudeCode、Codex等AI模型在开发中的使用
前端·人工智能·后端
MavenTalk5 分钟前
如何根据不同的场景选择YOLO相应的基座模型
python·yolo·yolo11n·yolo11m·yolo11s·yolo11x
神奇的代码在哪里7 分钟前
使用python开发任天堂gameboy模拟器|pyboy开发实践
python·宝可梦·pyboy·gameboy模拟器·任天堂掌机模拟器
坚持就完事了27 分钟前
正则表达式与Python的re模块
python·正则表达式
Alex艾力的IT数字空间27 分钟前
基于PyTorch和CuPy的GPU并行化遗传算法实现
数据结构·人工智能·pytorch·python·深度学习·算法·机器学习
keerduoba35 分钟前
EWCCTF2025 Tacticool Bin wp
python
a2006380121 小时前
ply(python版本的flex/bison or Lex/Yacc)
python
wokaoyan19811 小时前
逻辑推演题——谁是骗子
python
九年义务漏网鲨鱼1 小时前
利用AI大模型重构陈旧代码库 (Refactoring Legacy Codebase with AI)
python
AskHarries1 小时前
Toolhub — 一个干净实用的在线工具集合
前端·后端