【django】 F 和 Q 对象

在人生的道路上,不管是潇洒走一回,或者是千山独行,皆须是自己想走的路,虽然,有的人并不是很快就能找到自己的方向和道路,不过,只要坚持到底,我相信,就一定可以找到自己的路,只要找到路,就不必怕路途遥远了。

导读:本篇文章讲解 【django】 F 和 Q 对象,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

一、 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

(0)
飞熊的头像飞熊bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!