假如我们在django的admin后台默认添加了如上图所示的几个用户。每个用户拥有username、first_name、last_name等等几个字段。
or查询
在项目开发中我们可能有需求要在两个或多个条件下执行过滤,那么他们的过滤关系用中文来讲就是'或'的查询关系,英文成为'or'。假设在本例中你要查找所有以‘编’开头的first_name和‘谢’开头的last_name的所有用户。
Django为我们提供了两个查询方法:
queryset_1 | queryset_2
filter(Q(<condition_1>)|Q(<condition_2>))
来看看,具体的查询代码,一般这些查询代码在视图views.py文件中,我这里直接在终端进行调试
第一种or查询方法:queryset_1 | queryset_2
# User是django默认认证授权系统自带的用户模型
queryset = User.objects.filter(
# startswith区分大小写,查询的是开头字符
first_name__startswith='编'
) | User.objects.filter(
last_name__startswith='谢'
)
# 输出及输出结果
print(queryset)
<QuerySet [<User: admin>, <User: yonghu3>]>
第二章or查询方法:filter(Q(<condition_1>)|Q(<condition_2>))
# 第二种Q查询方法 endswith区分大小写,查询的是结尾字符
from django.db.models import Q
qs = User.objects.filter(Q(first_name__endswith='程')|Q(last_name__startswith='谢'))
# 输出及输出结果
print(qs)
<QuerySet [<User: admin>, <User: yonghu3>]>
and查询
and查询指的是查找与多个条件匹配的查询集,中文表达是什么和什么的关系。假设在本例中你要查找first_name以“霆”,last_name以“谢”开头的用户。
Django提供了三个选项:
filter(<condition_1>, <condition_2>)
queryset_1 & queryset_2
filter(Q(<condition_1>) & Q(<condition_2>))
第一种and组合多个条件的默认方式filter
qs1 = User.objects.filter(
first_name__startswith = '霆',
last_name__startswith = '谢'
)
# 输出及输出结果
print(qs1)
<QuerySet [<User: yonghu3>]>
第二种显示的在查询集上使用&运算符。
qs2 = User.objects.filter(
first_name__startswith = '霆'
) & User.objects.filter(
last_name__startswith = '谢'
)
# 输出及输出结果
print(qs2)
<QuerySet [<User: yonghu3>]>
第三种完全可定制的使用Q对象。
from django.db.models import Q
qs3 = User.objects.filter(
Q(first_name__startswith = '霆') &
Q(last_name__startswith = '谢')
)
# 输出及输出结果
print(qs3)
<QuerySet [<User: yonghu3>]>
not查询
以本例来讲,假设你要获取除超级管理员以外的所有用户,这里默认的管理员id为1,就需要执行not操作。
Django提供了两个选项。
exclude(<condition>)
filter(~Q(<condition>))
第一种使用默认的exclude排除法。
qs5 = User.objects.exclude(id=1)
# 输出及输出结果
print(qs5)
<QuerySet [<User: yonghu1>, <User: yonghu2>, <User: yonghu3>]>
第二章使用Q()方法
qs6 = User.objects.filter(~Q(id=1))
print(qs6)
<QuerySet [<User: yonghu1>, <User: yonghu2>, <User: yonghu3>]>
网友评论