1. QuerySet API
我们通常做查询操作的时候,都是通过模型名字.objects的方式进行操作。其实模型名字.objects是一个django.db.models.manager.Manager对象,而Manager这个类是一个“空壳”的类,他本身是没有任何的属性和方法的。他的方法全部都是通过Python动态添加的方式,从QuerySet类中拷贝过来的
所以我们如果想要学习ORM模型的查找操作,首先要学会QuerySet上的一些API的使用。
2. QuerySet的方法
在使用QuerySet进行查找操作的时候,可以提供多种操作。比如过滤完后还要根据某个字段进行排序,那么这一系列的操作我们可以通过一个非常流畅的链式调用的方式进行。比如要从文章表中获取标题为123,并且提取后要将结果根据发布的时间进行排序,那么可以使用以下方式来完成
articles = Article.objects.filter(title='123').order_by('create_time')
可以看到order_by方法是直接在filter执行后调用的。这说明filter返回的对象是一个拥有order_by方法的对象。而这个对象正是一个新的QuerySet对象。因此可以使用order_by方法。
那么以下将介绍在那些会返回新的QuerySet对象的方法。
- 1.
filter
:将满足条件的数据提取出来,返回一个新的QuerySet - 2.
exclude
:排除满足条件的数据,返回一个新的QuerySet
提取那些标题不包含hello
的图书
Article.objects.exclude(title__contains='hello')
3.annotate
:给QuerySet中的每个对象都添加一个使用查询表达式(聚合函数、F表达式、Q表达式、Func表达式等)的新字段
将在每个对象中都添加一个