F 和 Q 对象

Posted xinzaiyuan

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了F 和 Q 对象相关的知识,希望对你有一定的参考价值。

F和Q对象

F对象

之前的查询都是对象的属性与常量值比较,两个属性怎么比较呢? 答:使用F对象,被定义在django.db.models中。

语法如下:

F(属性名) 例:查询阅读量大于等于评论量的图书。

>>> from django.db.models import F
>>> BookInfo.objects.filter(readcount__gt=F('commentcount'))

可以在F对象上使用算数运算。

例:查询阅读量大于2倍评论量的图书。

>>> BookInfo.objects.filter(readcount__gt=F('commentcount')*2)

Q对象

多个过滤器逐个调用表示逻辑与关系,同sql语句中where部分的and关键字。

例:查询阅读量大于20,并且编号小于3的图书。

>>> BookInfo.objects.filter(readcount__gt=20,id__lt=3)

或者

>>> BookInfo.objects.filter(readcount__gt=20).filter(id__lt=3)

如果需要实现逻辑或or的查询,需要使用Q()对象结合|运算符,Q对象被义在django.db.models中。

语法如下:

Q(属性名__运算符=值)

例:查询阅读量大于20的图书,改写为Q对象如下。

BookInfo.objects.filter(Q(readcount__gt=20))
Q对象可以使用&、|连接,&表示逻辑与,|表示逻辑或。

例:查询阅读量大于20,或编号小于3的图书,只能使用Q对象实现

>>> BookInfo.objects.filter(Q(readcount__gt=20)|Q(id__lt=3))

Q对象前可以使用~操作符,表示非not。

例:查询编号不等于3的图书。

>>> BookInfo.objects.filter(~Q(id=3))

以上是关于F 和 Q 对象的主要内容,如果未能解决你的问题,请参考以下文章

django数据查询之F查询和Q查询

Django篇之F,Q

Objects 多条件 Q对象金额F 对象

七 Django框架,models.py模块,数据库操作——F和Q()运算符:|或者&并且——queryset对象序列化

基于对象的跨表查询,多对多查询,多对多操作,聚合查询和分组查询,F查询和Q 查询

Django-orm:单表查询基于对象和双下划线的多表操作集合查询分组查询F查询和Q查询