开启智能数字体验
Djacore CMS 驱动未来

基于Django 5.2的企业级智能内容管理系统,为千万级数据量设计, 提供安全、高效、可扩展的网站建设与内容管理一体化解决方案

django​​字段查找(Field Lookups)总结,django​​查询中指定特定的条件或对字段的处理方法

:本站 2025-10-08 23:07:49 13

django​​字段查找(Field Lookups)总结,django​​查询中指定特定的条件或对字段的处理方法

在Django ORM中,双下划线 __后跟的关键词(如 __date__icontains)被称为​​字段查找(Field Lookups)​​。它们用于在查询中指定特定的条件或对字段进行某种处理。

 

📊 主要字段查找方法

下表汇总了Django中一些常用且重要的字段查找方法:

查找类型

含义与用途

示例

__date

提取DateFieldDateTimeField的​​日期部分​​进行匹配,忽略时间。

filter(create_time__date=target_date)

 

__icontains

​不区分大小写​​的包含匹配。适用于字符串字段。

filter(title__icontains='django')

__contains

​区分大小写​​的包含匹配。

filter(title__contains='Django')

__exact

​精确​​匹配(默认查找,通常可省略)。

filter(id__exact=14)filter(id=14)

 

__iexact

​不区分大小写​​的精确匹配。

filter(title__iexact='hello world')

 

__in

检查字段值是否在给定的​​可迭代对象​​(如列表、元组)中。

filter(id__in=[1, 2, 3])

 

__gt

​大于​​。

filter(age__gt=18)

__gte

​大于等于​​。

filter(age__gte=18)

__lt

​小于​​。

filter(age__lt=30)

__lte

​小于等于​​。

filter(age__lte=30)

__startswith

​区分大小写​​的以特定字符串开头。

filter(title__startswith='The')

__istartswith

​不区分大小写​​的以特定字符串开头。

filter(title__istartswith='the')

__endswith

​区分大小写​​的以特定字符串结尾。

filter(title__endswith='end')

__iendswith

​不区分大小写​​的以特定字符串结尾。

filter(title__iendswith='END')

__range

检查字段值是否在给定的​​范围区间​​内(闭区间)。适用于数字和日期时间字段。

filter(pub_date__range=(start_date, end_date))

 

__isnull

检查字段值是否为​​NULL​​。True表示 NULL,False表示 NOT NULL。

filter(name__isnull=True)

 

__year/ __month/ __day

针对日期时间字段,提取​​年、月、日​​部分进行匹配。

filter(pub_date__year=2023)

⚠️ 使用 __date的注意事项

使用 __date查找时,需要注意时区问题,尤其是在处理 DateTimeField时。

 
  1. ​时区配置​​:确保 Django 项目的 settings.py中正确配置了 USE_TZTIME_ZONEUSE_TZ=True时,Django 会使用时区感知的 datetime 对象。

     
  2. ​数据库时区表​​:某些数据库(如 My**L)需要加载时区信息才能正确进行时区转换。如果数据库未配置时区表,__date查询可能会返回意外结果或空结果集。

     

    通常需要执行命令(如 mysql_tzinfo_to_sql)来导入时区信息。

     
  3. ​替代方案​​:如果遇到时区问题,可以考虑使用范围查询作为替代:

    import datetime
    from django.utils import timezone
    
    start_date = timezone.make_aware(datetime.datetime.combine(target_date, datetime.time.min))
    end_date = timezone.make_aware(datetime.datetime.combine(target_date, datetime.time.max))
    HotWord.objects.filter(create_time__range=(start_date, end_date)).order_by('-search_count')[:50]

    这种方法通过指定一天中的最早和最晚时间来确定一个日期范围。

💡 总结

掌握Django的字段查找(Field Lookups)能极大提升查询的灵活性和效率。

 

核心是理解:

  • __date​:用于忽略时间部分,按日期匹配。比如 target_date = timezone.now().date()

     
  • __icontains及其他 i前缀查找​​:用于进行不区分大小写的匹配。

  • 其他查找如 __gt, __in, __range等用于实现各种复杂的比较和范围条件。

     

使用时请留意时区问题,并根据实际情况选择最合适的查找方式。

本文编辑:admin

更多文章:


使用DRF快速搭建API接口,Django REST Framework ModelViewSet 用法总结

使用DRF快速搭建API接口,Django REST Framework ModelViewSet 用法总结

Django REST Framework ModelViewSet 用法总结1. ModelViewSet 简介ModelViewSet是 Django REST Framework (DRF) 中的一个视图集类,它继承自多个 mixin

2026年3月1日 09:10

django 使用selenium注意事项:Service /usr/local/bin/chromedriver unexpectedly exited. Status code was: 1解决办法

django 使用selenium注意事项:Service /usr/local/bin/chromedriver unexpectedly exited. Status code was: 1解决办法

在实操当中有一项目需要使用selenium进行浏览器模拟,但是测试了很多都不行,最后通过了,总一下系统级安装chrome浏览器及驱动这些都不细说了测试项目运行用户:check_user.py建立一个API,使用check_user获取用户,

2026年1月6日 00:58

Django移除模型后的content_type操作

Django移除模型后的content_type操作

旧应用(apps.content.download)的模型虽然已删除,但其在 django_content_type表中的记录仍然存在,与新应用(user_space.apps.download)的记录产生了混淆。您需要清理这些过时的记录。

2025年12月22日 11:36

django.utils中都有哪些功能?django.utils工具都详情的举例说明

django.utils中都有哪些功能?django.utils工具都详情的举例说明

Django 的 django.utils模块是一个“百宝箱”,它提供了大量用于处理日常底层任务的实用工具。下面这个表格汇总了其中一些最常用的工具模块及其核心功能,可以帮助你快速了解其概貌。模块/工具类别主要功能/工具举例简要说明djang

2025年11月27日 22:32

Django 的基于类的视图总结,Django CBV类的详细使用方法整理

Django 的基于类的视图总结,Django CBV类的详细使用方法整理

Django 的基于类的视图(Class-based Views,简称 CBV)通过类的形式封装了常见的 Web 开发模式,提供了清晰的结构和强大的可复用性。下面这个表格汇总了这些核心基类的主要作用和典型应用场景,可以帮助你快速了解其用途。

2025年11月17日 08:52

Django transaction.atomic() 的具体作用和用法?

Django transaction.atomic() 的具体作用和用法?

transaction.atomic()是 Django 中用于管理数据库事务的核心工具,它能确保一系列数据库操作作为一个不可分割的“原子”单元来执行。下面这个表格能帮你快速抓住要点。特性说明核心目标保证一系列数据库操作的原子性(Atomi

2025年10月31日 23:35

django 批量操作的方法有哪些?如何高效的批量更新django内容

django 批量操作的方法有哪些?如何高效的批量更新django内容

Django 提供了多种批量操作方法,能显著提升数据库操作的效率,特别是在处理大量数据时。下面为你梳理这些方法,并说明其适用场景和注意事项。下表总结了主要的批量操作方法及其核心用途:方法类别核心方法主要用途关键特点📦 批量创建bulk_cr

2025年10月31日 23:30

django的分页器以及django分页器中有哪些变量

django的分页器以及django分页器中有哪些变量

Django 的分页器(Paginator)是一个用于管理数据分页的强大工具,它能将大量数据分割成多个页面,并生成相应的导航链接。下面这个表格汇总了 Django 分页器中的核心类及其主要属性和方法,方便你快速了解其构成。组件/类别名称说明

2025年10月20日 10:16

Django get_FOO_display() 方法,Django模型中原生方法总结

Django get_FOO_display() 方法,Django模型中原生方法总结

在Django中有一种方法被称为 ​​get_FOO_display() 方法​​,对模型中定义了 choices选项的字段名的灵活使用方法。在Django中,choices参数用于为模型字段提供一组固定的可选值,它在数据库层面存储简洁的值

2025年10月13日 20:56

django​​字段查找(Field Lookups)总结,django​​查询中指定特定的条件或对字段的处理方法

django​​字段查找(Field Lookups)总结,django​​查询中指定特定的条件或对字段的处理方法

在Django ORM中,双下划线 __后跟的关键词(如 __date、__icontains)被称为​​字段查找(Field Lookups)​​。它们用于在查询中指定特定的条件或对字段进行某种处理。 📊

2025年10月8日 23:07

最近更新

使用DRF快速搭建API接口,Django REST Framework ModelViewSet 用法总结
2026-03-01 09:10:09 浏览:4
宝塔Nginx免费防火墙常用UA防护正则
2026-01-20 00:53:21 浏览:38
django 使用selenium注意事项:Service /usr/local/bin/chromedriver unexpectedly exited. Status code was: 1解决办法
2026-01-06 00:58:37 浏览:10
Django移除模型后的content_type操作
2025-12-22 11:36:29 浏览:6
热门文章

DjancoreCMS打包前操作
2025-05-26 17:58:05 浏览:81
宝塔Nginx免费防火墙常用UA防护正则
2026-01-20 00:53:21 浏览:38
标签列表