F和Q对象
F对象
- 之前的查询都是模型对象的属性与常量值比较,两个属性怎么比较呢?
- 答:使用F对象
F对象语法:
from django.db.models import F
F('属性名')
F对象查询需求
# 1.查询阅读量大于评论量的书籍
# 2.查询阅读量大于2倍评论量的书籍
1.查询阅读量大于评论量的书籍
bookInfos = BookInfo.books.filter(readcount__gt=F('commentcount'))
2.查询阅读量大于2倍评论量的书籍 : F对象支持运算
bookInfos = BookInfo.books.filter(readcount__gt=F('commentcount')*2)
Q对象
多个过滤器逐个调用表示逻辑与关系,同sql语句中where部分的and关键字
例:查询阅读量大于20,并且编号小于3的图书
bookInfos = BookInfo.books.filter(readcount__gt=20,id__lt=3) 或 bookInfos = BookInfo.books.filter(readcount__gt=20).filter(id__lt=3)
如果需要实现逻辑或的查询(or),需要使用
Q()
对象结合|
运算符
Q对象语法:
from django.db.models import Q
Q(模型属性1__条件运算符=值) | Q(模型属性2__条件运算符=值)
Q对象查询需求
# 1.查询阅读量大于20,或编号小于3的图书
# 2.查询编号不等于3的书籍
1.查询阅读量大于20,或编号小于3的图书
bookInfos = BookInfo.books.filter(Q(readcount__gt=20) | Q(id__lt=3))
2.查询编号不等于3的书籍 (Q对象前可以使用~操作符,表示非not)
bookInfos = BookInfo.books.filter(~Q(id=3)) 或 bookInfos = BookInfo.books.exclude(id=3)