一、F对象
之前的查询都是对象的属性与常量值比较,两个属性要如何比较呢?可以使用F对象,被定义在django.db.models中。
在子应用book/views.py文件中
查询阅读量大于等于评论量的图书
from django.db.models import F
# 使用:2个属性的比较
# 语法形式:以filter 为例 模型类名.objects.filter(属性名__运算符 = F("第二个属性"))
# 查询阅读量大于等于评论量的图书
BookInfo.objects.filter(readcount__gte = F('commentcount'))

二、Q对象
多个过滤器逐个调用表示逻辑与关系,同sql语句中where部分的and/or关键字
# 并且查询
# 查询阅读量大于20,并且编号小于3的图书
# 第一种表达方式
BookInfo.objects.filter(readcount__gt = 20).filter(id__lt = 3)
# 第二种表达方式
BookInfo.objects.filter(readcount__gt = 20,id__lt = 3)
# 或者查询
from django.db.models import Q
# 或者语法:模型类名.objects.filter(Q(属性名__运算符 = 值)|Q(属性名__运算符 = 值))
# 并且语法:模型类名.objects.filter(Q(属性名__运算符 = 值)& Q(属性名__运算符 = 值))
# 查询阅读量大于20或者id小于3的数据
BookInfo.objects.filter(Q(readcount__gt = 20) | Q(id__lt = 3))
# Q对象前可以使用~操作符,表示非not
# 查询编号不等于3的图书
BookInfo.objects.filter(~Q(id = 3))

网友评论