搜文章
推荐 原创 视频 Java开发 iOS开发 前端开发 JavaScript开发 Android开发 PHP开发 数据库 开发工具 Python开发 Kotlin开发 Ruby开发 .NET开发 服务器运维 开放平台 架构师 大数据 云计算 人工智能 开发语言 其它开发
Lambda在线 > ZPC的学习 > Django F对象和Q对象查询详解

Django F对象和Q对象查询详解

ZPC的学习 2020-10-19

F对象查询与Q对象查询,它们是 Django 提供的查询方法,而且非常的简单的高效,对于一些特殊的场景需求应用起来非常的合适。

1. F对象查询

F对象主要用于模型类的 A 字段属性与 B 字段属性两者的比较,即操作数据库中某一列的值。通常是对数据库中的字段值在不获取的情况下进行操作。F 对象内置在数据包django.db.models中,所以使用时需要提前导入。如下所示:

from django.db.models import F

它的语法格式如下所示:

 
   
   
 
from django.db.models import FF('字段名')

在使用F对象进行查询的时候需要注意:一个 F() 对象代表了一个 Model 的字段的值;F 对象可以在没有实际访问数据库获取数据值的情况下对字段的值进行引用。

Django 支持对 F对象引用字段的算术运算操作,并且运算符两边可以是具体的数值或者是另一个 F 对象,下面我们通过实例进一步认识 F 对象。

 
   
   
 
from django.db.models import Ffrom index.models import BookBook.objects.all().update(retail_price=F('retail_price')+20)books = models.Book.objects.all()for book in books:    book.update(retail_price=book.retail_price+20)    book.save()

通过上述实例可以看出,使用 F 对象相对传统的方法要简单的多。那么如何通过 F 对象实现两个字段值(列)之间的比较呢?实例如下所示:

 
   
   
 
books = Book.objects.filter(retail_price__gt=F('price'))for book in books:print(book.title, '定价:', book.price, '现价:', book.retail_price)


2. Q对象查询

Q 对象相比 F 对象更加复杂一点,它主要应用于包含逻辑运算的复杂查询。Q 对象把关键字参数封装在一起,并传递给 filter、exclude、get 等查询的方法。多个 Q 对象之间可以使用&或者|运算符组合(符号分别表示与和或的关系),从而产生一个新的 Q 对象。当然也可以使用~(非)运算符来取反,从而实现NOT查询。Q 对象的导入方式如下所示:

from django.db.models import Q

它和 Q 对象位于一个数据包里面。常用语法格式如下:

 
   
   
 
from django.db.models import QQ(条件1)|Q(条件2)Q(条件1)&Q(条件2)Q(条件1)&~Q(条件2)


最简单的 Q 对象的使用方法是将单个字段类属性作为参数进行查询,实例如下:

 
   
   
 
In [1]: from index.models import Book
In [2]: from django.db.models import Q
In [4]: Book.objects.filter(Q(title__contains="P"))
Out[4]: <QuerySet [<Book: Book object (1)>]>


但时 Q 对象在实际的应用中往往是较为复杂的,和常和逻辑运算符一起使用,如下所示:

from index.models import Bookfrom django.db.models import QBook.objects.filter(Q(retail_price__lt=35)|Q(pub_id='2'))Book.objects.filter(Q(retail_price__lt=45)&~Q(pub_id='2'))

Q 对象也可以与类属性的字段名组合在一起使用,但是在这种情况下,Django 规定,Q 对象必须放在前面,示例如下:

 
   
   
 
Book.objects.filter(Q(price__lte=100),title__icontains="p")<QuerySet [<Book: Book object (1)>]>
F 和 Q查询在在使用中是经常的要使用到的。

版权声明:本站内容全部来自于腾讯微信公众号,属第三方自助推荐收录。《Django F对象和Q对象查询详解》的版权归原作者「ZPC的学习」所有,文章言论观点不代表Lambda在线的观点, Lambda在线不承担任何法律责任。如需删除可联系QQ:516101458

文章来源: 阅读原文

相关阅读

关注ZPC的学习微信公众号

ZPC的学习微信公众号:gh_cc3e0e51144e

ZPC的学习

手机扫描上方二维码即可关注ZPC的学习微信公众号

ZPC的学习最新文章

精品公众号随机推荐

上一篇 >>

专栏|MySQL

下一篇 >>

Django的基础操作