一、 F对象
之前的查询都是对象的属性与常量值⽐较,两个属性怎么⽐较呢? 答:使⽤F对象,被定义在django.db.models中。
语法如下:
F(属性名)
1、例:查询播放量⼤于等于评论量的影⽚。
from django.db.models import F
FilmInfo.objects.filter(playcount__gt=F('commentcount'))
<QuerySet [<FilmInfo: 金刚狼>, <FilmInfo: 夺冠>, <FilmInfo: 我和我的家人>, <FilmInfo: shell>]>
可以在F对象上使⽤算数运算。
2、例:查询播放量⼤于2倍评论量的影⽚。
FilmInfo.objects.filter(playcount__gt=F('commentcount')*2)
<QuerySet [<FilmInfo: 金刚狼>, <FilmInfo: 夺冠>, <FilmInfo: 我和我的家人>, <FilmInfo: shell>]>
二、Q对象
多个过滤器逐个调⽤表示逻辑与关系,同sql语句中where部分的and关键字。
3、例:查询播放量⼤于20,并且编号⼩于1003的影⽚。
方法1
FilmInfo.objects.filter(playcount__gt=20,fid__lt=4)
<QuerySet [<FilmInfo: 金刚狼>, <FilmInfo: 夺冠>]>
方法2
FilmInfo.objects.filter(playcount__gt=20).filter(fid__lt=4)
<QuerySet [<FilmInfo: 金刚狼>, <FilmInfo: 夺冠>]>
如果需要实现逻辑或or的查询,需要使⽤Q()对象结合|运算符,Q对象被定义在django.db.models中
语法如下:
Q(属性名__运算符=值)
4、例:查询播放量⼤于20,或编号⼩于3的影⽚,只能使⽤Q对象实现
Q对象可以使⽤&、|连接,&表示逻辑与,|表示逻辑或。
FilmInfo.objects.filter(Q(playcount__gt=20) | Q(fid__lt=3))
<QuerySet [<FilmInfo: django>, <FilmInfo: 金刚狼>, <FilmInfo: 夺冠>, <FilmInfo: 我和我的家人>, <FilmInfo: shell>]>
Q对象前可以使⽤~操作符,表示⾮not。
5、例:查询编号不等于3的影⽚
FilmInfo.objects.filter(~Q(fid=3))
<QuerySet [<FilmInfo: django>, <FilmInfo: 我爱你中国>, <FilmInfo: 我爱你china>]>
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/123496.html