Menu
×
   ❮   
HTML CSS JAVASCRIPT SQL PYTHON JAVA PHP HOW TO W3.CSS C C++ C# BOOTSTRAP REACT MYSQL JQUERY EXCEL XML DJANGO NUMPY PANDAS NODEJS R TYPESCRIPT ANGULAR GIT POSTGRESQL MONGODB ASP AI GO KOTLIN SASS VUE DSA GEN AI SCIPY AWS CYBERSECURITY DATA SCIENCE
     ❯   

Django 查询集 - 过滤


查询集过滤

filter() 方法用于过滤搜索结果,并允许您仅返回与搜索词匹配的行。

正如我们在上一章中所学到的,我们可以像这样过滤字段名称

示例

仅返回 firstname 为 'Emil' 的记录

mydata = Member.objects.filter(firstname='Emil').values()
运行示例 »

在 SQL 中,上面的语句将这样编写

SELECT * FROM members WHERE firstname = 'Emil';

AND

filter() 方法将参数作为 **kwargs(关键字参数)接收,因此您可以通过逗号分隔来过滤多个字段。

示例

返回 lastname 为 "Refsnes" 且 id 为 2 的记录

mydata = Member.objects.filter(lastname='Refsnes', id=2).values()
运行示例 »

在 SQL 中,上面的语句将这样编写

SELECT * FROM members WHERE lastname = 'Refsnes' AND id = 2;

OR

要返回 firstname 为 Emil 或 firstname 为 Tobias 的记录(意思是:返回匹配任一查询的记录,不一定同时匹配),并不像上面的 AND 示例那样容易。

我们可以使用多个 filter() 方法,用管道 | 字符分隔。结果将合并成一个模型。

示例

返回 firstname 为 "Emil" 或 Tobias 的记录

mydata = Member.objects.filter(firstname='Emil').values() | Member.objects.filter(firstname='Tobias').values()
运行示例 »

另一种常见的方法是导入并使用 Q 表达式

示例

返回 firstname 为 "Emil" 或 Tobias 的记录

from django.http import HttpResponse
from django.template import loader
from .models import Member
from django.db.models import Q

def testing(request):
  mydata = Member.objects.filter(Q(firstname='Emil') | Q(firstname='Tobias')).values()
  template = loader.get_template('template.html')
  context = {
    'mymembers': mydata,
  }
  return HttpResponse(template.render(context, request))
运行示例 »

在 SQL 中,上面的语句将这样编写

SELECT * FROM members WHERE firstname = 'Emil' OR firstname = 'Tobias';

字段查找

Django 有自己的方法来指定 SQL 语句和 WHERE 子句。

要在 Django 中创建特定的 WHERE 子句,请使用 "字段查找"。

字段查找是表示特定 SQL 关键字的关键词。

示例

使用 __startswith 关键词

.filter(firstname__startswith='L');

与 SQL 语句相同

WHERE firstname LIKE 'L%'

上面的语句将返回 firstname 以 'L' 开头的记录。

字段查找语法

所有字段查找关键词都必须用字段名后跟两个 (!) 下划线字符和关键词来指定。

在我们的 Member 模型中,语句将这样编写

示例

返回 firstname 以字母 'L' 开头的记录

mydata = Member.objects.filter(firstname__startswith='L').values()
运行示例 »

字段查找参考

所有字段查找关键词的列表

关键词 描述
contains 包含短语
icontains 与 contains 相同,但区分大小写
date 匹配日期
day 匹配日期(月份中的日期,1-31)(对于日期)
endswith 以…结尾
iendswith 与 endswidth 相同,但区分大小写
exact 精确匹配
iexact 与 exact 相同,但区分大小写
in 匹配其中一个值
isnull 匹配 NULL 值
gt 大于
gte 大于或等于
hour 匹配小时(对于日期时间)
lt 小于
lte 小于或等于
minute 匹配分钟(对于日期时间)
month 匹配月份(对于日期)
quarter 匹配年份的季度(1-4)(对于日期)
range 匹配之间
regex 匹配正则表达式
iregex 与 regex 相同,但区分大小写
second 匹配秒(对于日期时间)
startswith 以…开头
istartswith 与 startswith 相同,但区分大小写
time 匹配时间(对于日期时间)
week 匹配星期数(1-53)(对于日期)
week_day 匹配星期几(1-7)1 是星期日
iso_week_day 匹配 ISO 8601 星期几(1-7)1 是星期一
year 匹配年份(对于日期)
iso_year 匹配 ISO 8601 年份(对于日期)


×

Contact Sales

If you want to use W3Schools services as an educational institution, team or enterprise, send us an e-mail:
[email protected]

Report Error

If you want to report an error, or if you want to make a suggestion, send us an e-mail:
[email protected]

W3Schools is optimized for learning and training. Examples might be simplified to improve reading and learning. Tutorials, references, and examples are constantly reviewed to avoid errors, but we cannot warrant full correctness of all content. While using W3Schools, you agree to have read and accepted our terms of use, cookie and privacy policy.

Copyright 1999-2024 by Refsnes Data. All Rights Reserved. W3Schools is Powered by W3.CSS.