Django 基础教程

Django 查询

Django 展示数据

Django Admin

Django 模板

Django 表单组件

Django 高级

Django FAQ

original icon
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.knowledgedict.com/tutorial/django-field-lookup.html

Django 字段条件查询关键字的全解


在 Django 中,字段条件查询是指使用 ORM(Object-Relational Mapping)来构建数据库查询语句,以过滤和获取符合特定条件的数据记录。

常用查询关键字

下面是一些常用的字段条件查询关键字,以及相应的示例代码和解释:

exact(精确匹配)

from myapp.models import Product

# 获取name字段为"Widget"的产品
product = Product.objects.get(name__exact="Widget")

使用 exact 关键字,可以对字段进行精确匹配查询。上述代码中,我们从 Product 模型中获取 name 字段为"Widget"的产品。这会生成 SQL 查询语句类似于: SELECT * FROM product WHERE name = 'Widget';

iexact(忽略大小写的精确匹配)

# 获取name字段为"widget"的产品,忽略大小写
product = Product.objects.get(name__iexact="widget")

使用 iexact 关键字,可以对字段进行忽略大小写的精确匹配查询。上述代码中,我们从 Product 模型中获取 name 字段为"widget"的产品,无论"widget"是大写还是小写,都能匹配成功。

contains(包含查询)

# 获取name字段包含"gadget"的产品
products = Product.objects.filter(name__contains="gadget")

使用 contains 关键字,可以对字段进行包含查询。上述代码中,我们从 Product 模型中筛选出 name 字段包含"gadget"的产品。这会生成 SQL 查询语句类似于: SELECT * FROM product WHERE name LIKE '%gadget%';

icontains(忽略大小写的包含查询)

# 获取name字段包含"Gadget"的产品,忽略大小写
products = Product.objects.filter(name__icontains="Gadget")

使用 icontains 关键字,可以对字段进行忽略大小写的包含查询。上述代码中,我们从 Product 模型中筛选出 name 字段包含"Gadget"的产品,无论"Gadget"的大小写如何,都能匹配成功。

startswith(以指定内容开头查询)

# 获取name字段以"Super"开头的产品
products = Product.objects.filter(name__startswith="Super")

使用 startswith 关键字,可以对字段进行以指定内容开头的查询。上述代码中,我们从 Product 模型中筛选出 name 字段以"Super"开头的产品。这会生成 SQL 查询语句类似于: SELECT * FROM product WHERE name LIKE 'Super%';

istartswith(忽略大小写的以指定内容开头查询)

# 获取name字段以"super"开头的产品,忽略大小写
products = Product.objects.filter(name__istartswith="super")

使用 istartswith 关键字,可以对字段进行忽略大小写的以指定内容开头的查询。上述代码中,我们从 Product 模型中筛选出 name 字段以"super"开头的产品,无论"super"的大小写如何,都能匹配成功。

endswith(以指定内容结尾查询)

# 获取name字段以"123"结尾的产品
products = Product.objects.filter(name__endswith="123")

使用 endswith 关键字,可以对字段进行以指定内容结尾的查询。上述代码中,我们从 Product 模型中筛选出 name 字段以"123"结尾的产品。这会生成 SQL 查询语句类似于: SELECT * FROM product WHERE name LIKE '%123';

iendswith(忽略大小写的以指定内容结尾查询)

# 获取name字段以"XYZ"结尾的产品,忽略大小写
products = Product.objects.filter(name__iendswith="XYZ")

使用 iendswith 关键字,可以对字段进行忽略大小写的以指定内容结尾的查询。上述代码中,我们从 Product 模型中筛选出 name 字段以"XYZ"结尾的产品,无论"XYZ"的大小写如何,都能匹配成功。

range(范围查询)

# 获取price字段在100到200之间的产品
products = Product.objects.filter(price__range=(100, 200))

使用 range 关键字,可以对字段进行范围查询。上述代码中,我们从 Product 模型中筛选出 price 字段在 100 到 200 之间的产品。这会生成 SQL 查询语句类似于: SELECT * FROM product WHERE price BETWEEN 100 AND 200;

gt(大于查询)

# 获取price字段大于100的产品
products = Product.objects.filter(price__gt=100)

使用 gt 关键字,可以对字段进行大于查询。上述代码中,我们从 Product 模型中筛选出 price 字段大于 100 的产品。这会生成 SQL 查询语句类似于: SELECT * FROM product WHERE price > 100;

lt(小于查询)

# 获取price字段小于200的产品
products = Product.objects.filter(price__lt=200)

使用 lt 关键字,可以对字段进行小于查询。上述代码中,我们从 Product 模型中筛选出 price 字段小于 200 的产品。这会生成 SQL 查询语句类似于: SELECT * FROM product WHERE price < 200;

gte(大于等于查询)

# 获取price字段大于等于150的产品
products = Product.objects.filter(price__gte=150)

使用 gte 关键字,可以对字段进行大于等于查询。上述代码中,我们从 Product 模型中筛选出 price 字段大于等于 150 的产品。这会生成 SQL 查询语句类似于: SELECT * FROM product WHERE price >= 150;

lte(小于等于查询)

# 获取price字段小于等于250的产品
products = Product.objects.filter(price__lte=250)

使用 lte 关键字,可以对字段进行小于等于查询。上述代码中,我们从 Product 模型中筛选出 price 字段小于等于 250 的产品。这会生成 SQL 查询语句类似于: SELECT * FROM product WHERE price <= 250;

isnull(为空查询)

# 获取description字段为空的产品
products = Product.objects.filter(description__isnull=True)

使用 isnull 关键字,可以对字段进行为空查询。上述代码中,我们从 Product 模型中筛选出 description 字段为空的产品。这会生成 SQL 查询语句类似于: SELECT * FROM product WHERE description IS NULL;

in(包含在列表中查询)

# 获取id字段在列表[1, 3, 5]中的产品
products = Product.objects.filter(id__in=[1, 3, 5])

使用 in 关键字,可以对字段进行包含在列表中查询。上述代码中,我们从 Product 模型中筛选出 id 字段在列表[1, 3, 5]中的产品。这会生成 SQL 查询语句类似于: SELECT * FROM product WHERE id IN (1, 3, 5);

这些是一些常用的字段条件查询关键字,通过它们,您可以构建复杂的查询语句来过滤和获取数据库中的数据记录。在实际应用中,可以根据具体需求选择合适的关键字来执行查询操作,从而获得符合预期条件的数据。

所有条件查询关键字

以下是 Django 字段条件查询的所有关键字列表:

关键字 作用
contains 筛选包含特定字符串。
icontains 筛选包含不区分大小写特定字符串。
date 对日期字段进行过滤。
day 日期字段的天数进行匹配。
endswith 筛选以特定后缀结尾的字段值。
iendswith 筛选不区分大小写以特定后缀结尾的字段值。
exact 查询匹配字段的完全相等值。
iexact 大小写不敏感的精确匹配查询。
in 筛选出字段的值在给定列表中。
isnull 检查某个字段是否为空。
gt 筛选出大于指定值。
gte 筛选大于等于指定值。
hour 筛选符合指定小时的数据。
lt 筛选小于指定值。
lte 筛选小于等于指定值。
minute 筛选符合指定分钟的数据。
month 筛选符合指定月份的数据。
quarter 筛选指定日期字段的季度。
range 指定范围条件。
regex 正则表达式匹配。
iregex 不区分大小写的正则表达式匹配。
second 筛选时间字段的秒数。
startswith 匹配字符开头。
istartswith 不区分大小写匹配字符开头。
time 使用时间相关的条件过滤。
week 对日期时间字段进行周数条件筛选
week_day 指定某一周的星期几来过滤。
iso_week_day 对日期字段 ISO 周天条件查询。
year 提取年份过滤查询。
iso_year iso 提取年份过滤查询。