菜单
×
   ❮   
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 QuerySet - Filter


QuerySet Filter

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()
运行示例 »

字段查找参考

所有字段查找关键字列表

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


×

联系销售

如果您想将 W3Schools 服务用于教育机构、团队或企业,请发送电子邮件给我们
sales@w3schools.com

报告错误

如果您想报告错误,或想提出建议,请发送电子邮件给我们
help@w3schools.com

W3Schools 经过优化,旨在方便学习和培训。示例可能经过简化,以提高阅读和学习体验。教程、参考资料和示例会不断审查,以避免错误,但我们无法保证所有内容的完全正确性。使用 W3Schools 即表示您已阅读并接受我们的使用条款Cookie 和隐私政策

版权所有 1999-2024 Refsnes Data。保留所有权利。W3Schools 由 W3.CSS 提供支持