从数据库中查询出来的结果一般是一个集合,这个集合叫做 QuerySet。...将执行数据库查询并返回一个列表。...tzinfo参数定义在截取之前将数据时间转换到的时区。 11. none() 调用none()将创建一个不返回任何对象的查询集,并且在访问结果时不会执行任何查询。...13. union() union(*other_qs, all=False) 集合中并集 使用SQL的UNION运算符组合两个或更多个QuerySet的结果。...14. intersection() intersection(*other_qs) 集合中交集 使用SQL的INTERSECT运算符返回两个或更多个QuerySet的共有元素。
使用过滤器获取特定对象 all()方法返回的结果集中包含全部对象,但是更普遍的情况是你需要获取完整集合的一个子集。 要创建这样一个子集,需要精炼上面的结果集,增加一些过滤器作为条件。...两个最普遍的途径是: filter(**kwargs) 返回一个包含对象的集合,它们满足参数中所给的条件。...如果我们要对两个字段的值做比较,那该怎么做呢? Django 提供 F() 来做这样的比较。F() 的实例可以在查询中引用字段,来比较同一个 model 实例中两个不同字段的值。...将某个特定的对象从被关联对象集合中去除。 clear() 清空被关联对象集合。 想一次指定关联集合的成员,那么只要给关联集合分配一个可迭代的对象即可。它可以包含对象的实例,也可以只包含主键的值。...如果 clear() 方法是可用的,在迭代器(上例中就是一个列表)中的对象加入到 entry_set 之前,已存在于关联集合中的所有对象将被清空。
QuerySet QuerySet本身可以在不访问数据库的情况下构造、过滤、切片或复制和分配。只需要在需要从数据库检索数据或将数据保存到数据库时访问数据库。...切片未执行的QuerySet通常会返回另一个未执行的Query Set。但是,如果使用切片语法的step参数,Django将执行数据库查询并返回一个列表。...对执行的QuerySet进行切片也会返回一个列表。...为了实现这一点,大多数QuerySet方法返回一个新的查询集。本节稍后将详细介绍这些方法。...annotation()的每个参数都是一个注释,将添加到返回的QuerySet中的每个对象。 Django提供的聚合函数在以下聚合函数中进行了描述。
你有两个原因可能会自己定义管理器:向器类中添加额外的方法,或者修改管理器最初返回的查询集。...例如,下面这个自定义的 管理器提供了一个 with_counts() 方法,它返回所有 OpinionPoll 对象的列表,而且列表中的每个对象都多了一个名为 num_responses的属性,这个属性保存一个聚合查询...由于 get_queryset() 返回的是一个 查询集 对象,所以你仍可以对它使用 filter(), exclude()和其他 查询集的方法。...创建管理器 * django 1.7 中新增 * 对于上面的例子,同一个方法需要在查询集 和 管理器上创建两份副本,作为替代,QuerySet.as_manager()可以创建一个管理器的实例,它拥有自定义查询集的方法...from_queryset classmethod from_queryset(queryset_class) 在进一步的使用中,你可能想创建一个自定义管理器和一个自定义查询集。
在这些例子中,Django管理后台可以让你实现和注册“操作” —— 仅仅只是一个以已选中对象集合为参数的回调函数。 在Django自带的管理页面中都能看到这样的例子。...或者请求对象,但是我们会用到查询集: def make_published(modeladmin, request, queryset): queryset.update(status='p')...注意 为了性能最优,我们使用查询集的update 方法。...其它类型的操作可能需要分别处理每个对象;这种情况下我们需要对查询集进行遍历: for obj in queryset: do_something_with(obj) 编写操作的全部内容实际上就这么多了...这个视图的编写作为一个练习留给读者。 在整个站点应用操作 AdminSite.
=100) 删除数据 删除记录是指删除数据库中的一条或多条记录 删除单个MyModel对象或删除一个查询结果集(QuerySet)中的全部对象都是调用 delete()方法 删除单个对象 步骤 查找查询结果对应的一个数据对象...步骤 查找查询结果集中满足条件的全部 QuerySet 查询集合对象 调用查询集合对象的 delete () 方法实现删除 示例: # 删除全部作者中,年龄大于65的全部信息 auths = Author.objects.filter...(age__gt=65) auths.delete() 聚合查询 聚合查询是指对一个数据表中的一个字段的数据进行部分或全部进行统计查询,查bookstore_book数据表中的全部书的平均价格,查询所有书的总个数等...,都要使用聚合查询 不带分组聚合 不带分组的聚合查询是指导将全部数据进行集中统计查询 聚合函数【需要导入】: 导入方法: from django.db.models import * 聚合函数: Sum...,从而得出总计值 (也可以是平均值或总和),即为查询集的每一项生成聚合。
PeopleInfo: 王语嫣>, <PeopleInfo 6.查询集QuerySet 1 概念 Django的ORM中存在查询集的概念。...查询集,也称查询结果集、QuerySet,表示从数据库中获取的对象集合。 当调用如下过滤器方法时,Django会返回查询集(而不是简单的列表): all():返回所有数据。...QuerySet [, ]> 也就意味着查询集可以含有零个、一个或多个过滤器。...使用同一个查询集,第一次使用时会发生数据库的查询,然后Django会把结果缓存下来,再次使用这个查询集时会使用缓存的数据,减少了数据库的查询次数。...对查询集进行切片后返回一个新的查询集,不会立即执行查询。
表示对象列表的一个页面. 执行这个视图的时候,self.object_list将包含视图正在操作的对象列表(通常是一个查询集,但不是必须)....属性: model: 指定模型 tempalta_name:模板文件 queryset:指定一个经过过滤的对象列表,将取代model提供的值 context_object_name: 指定要在上下文中使用的变量的名称...方法: get_queryset():获取此视图的对象列表.必须是可迭代或者可以使查询集.默认返回queryset属性.可以通过重写该方法实现动态过滤.让这种方式能够工作的关键点,在于当类视图被调用时...属性: model: 视图要显示的模型 queryset: 表示对象的一个查询集.queryset的值优先于model的值. template_name: 字符串表示的模板名称. context_object_name...form.fieldname:直接将form作为一个dict,引用其每一个field,比如{{ form.title }} 引用form中的title这个field。
表示对象列表的一个页面. 执行这个视图的时候,self.object_list将包含视图正在操作的对象列表(通常是一个查询集,但不是必须)....方法: get_queryset():获取此视图的对象列表.必须是可迭代或者可以使查询集.默认返回queryset属性.可以通过重写该方法实现动态过滤.让这种方式能够工作的关键点,在于当类视图被调用时...属性: model: 视图要显示的模型 queryset: 表示对象的一个查询集.queryset的值优先于model的值. template_name: 字符串表示的模板名称. context_object_name...None):返回该视图要显示的单个对象.如果提供了queryset,该queryset将作为对象的查询源,否则,将使用get_queryset().get_object()从视图的所有参数中查找pk_url_kwarg...form.fieldname:直接将form作为一个dict,引用其每一个field,比如{{ form.title }} 引用form中的title这个field。
我们能够识别一些基础的任务,比如展示对象的列表,以及编写代码来展示任何对象的 列表。此外,有问题的模型可以作为一个额外的参数传递到URLconf中。...当你处理 一个object或者queryset时,Django能够使用你定义对象显示用的自述名(verbose name,或者复数的自述名,对于对象列表)来填充上下文(context)。...model参数指定了视图在哪个数据库模型之上进行操作,这适用于所有的需要 操作一个单独的对象或者一个对象集合的通用视图。...然而,通过使用queryset来定义一个过滤的对象列表,你可以更加详细 的了解哪些对象将会被显示的视图中(参见执行查询来获取更多关于查询集对象的更对信息,以及参见 基于类的视图参考来获取全部 细节)。...# Return the object return object 注意 这里URLconf使用参数组的名字pk - 这个名字是DetailView用来查找主键的值的默认名称,其中主键用于过滤查询集
: 在未指定primary_key的情况下,Django会默认创建一个id自增字段作为主键。...filter返回的是一个QuerySet对象,filter里可以设定多个过滤条件 4、查 查询数据使用QuerySet API。...datetimes() 根据时间获取查询集 none() 创建空的查询集 union() 并集 intersection...raw() 接收一个原始的SQL查询 1.filter(): filter(**kwargs) 返回满足查询参数的对象集合。 ...每个元组包含传递给values_list()调用的相应字段或表达式的值,因此第一个项目是第一个字段等。
python:3.5、3.6、3.7、3.8 django:2.2、3.0、3.1 DRF : 3.10+ 简单入门 Django-filter 提供了一种基于用户提供的参数过滤查询集的简单方法。...假设我们有一个Product模型,我们想让我们的用户过滤他们在列表页面上看到的产品。...,默认查询全部,可以根据name/price/release_date查询 该form属性包含一个普通的 Django 表单,当我们遍历 时,FilterSet.qs我们会得到结果查询集中的对象。...FilterSet.qs查询结果 FilterSet.qs 查询的结果是 QuerySet 集合,可以转成 json 格式 from django.forms.models import model_to_dict...例如,您可以将博客文章过滤为仅发布的文章和登录用户拥有的文章)。
特别点 本文将翻译 django 官网的 模型层的 QuerySet 章节 文档版本:1.11 Making queries 进行查询 一旦你创建了 数据表模型类,django 会自动给你一些数据库抽象...是相互独立的 第一个 QuerySet 包含了所有的 文章标题(headline) 以 What 开头的 QuerySet 对象(记录对象集合) 第二个 QuerySet 是第一个集合的子集合(再次筛选后的对象...第一个 QuerySet(q1) 不受 其他两个(q2、q3)的影响。...缓存中,并返回查询出来的结果集。...WHERE id IN (1, 3, 4); # 补充:也可以使用会动态的查询 QuerySet 作为列表 inner_qs = Blog.objects.filter(name__contains=
一、查询基础QuerySet 详解Django 中通过模型类的 Manager 构建 QuerySet 来检索数据库对象,其核心特性包括:代表数据库中对象的集合可通过过滤器缩小查询范围具有惰性执行特性(...:Django 数据库访问优化三、高级查询优化values()返回字典形式的查询集(返回一个 ValuesQuerySet 对象,其中每个元素是一个字典),适合提取特定字段books = Book.objects.values...(返回一个 ValuesListQuerySet 对象,其中每个元素是一个元组),内存占用更低books = Book.objects.values_list('title', 'author')for...,字典的键为字段名,值为字段对应的数据返回一个包含元组的查询集,元组中的元素依次对应指定字段的值 内存占用 相对较高,因为字典需要存储键值对信息 通常更节省内存...Q() 对象复杂查询Q() 对象用于构建复杂查询条件,支持逻辑运算&:逻辑与(AND)|:逻辑或(OR)~:逻辑非(NOT)from django.db.models import Q# 标题含Python
运行Django项目python manage.py runserver 0.0.0.0:8000打开浏览器登录访问:http://127.0.0.1:8000/api/books/get:查询列表post...filter_backends 用于过滤查询集的后端类列表,默认使用全局配置 DEFAULT_FILTER_BACKENDS。...数据查询相关方法get_queryset(self):返回视图使用的查询集,是获取数据的主要入口。...filter_queryset(self, queryset):应用过滤后端对查询集进行过滤,返回处理后的查询集。...paginate_queryset(self, queryset):对查询集进行分页处理,返回页面对象或 None(若未配置分页)。
可以在QuerySet引用中找到可用聚合函数的列表。 Aggregate()是QuerySet的一个结束语句。...使用后,它将返回一个“name value”字典,其中“name”是聚合值的标志,“value”是计算的聚合结果。名称是根据字段名称和聚合函数自动生成的。...但是,有时要聚合的值属于所查询模型的关联模型。 在聚合函数中指定聚合字段时,Django允许您在筛选相关字段时使用相同的双下划线符号。Django将处理需要检索和聚合相关值的任何表连接。...例如,可以使用查询生成所有书籍的注释列表。此列表的标题以“Django”开头。...第一个查询请求具有至少一本得分大于3的书的平均得分。第二个查询仅请求得分超过3的作者书的平均分数。 很难直观地理解ORM如何将复杂的查询集转换为SQL查询。
除了这种方式也可以手动创建一个表,手动添加两个外键来实现多对多。...()所有结果 get(**kwargs)得到一个结果,如果结果多于一个或没有都会报错 如果查询结果是一个结果集,即QuerySet对象,那么它还有以下方法 values(*field): 返回一个ValueQuerySet...2.QuerySet对象 查询的结果集就是一个QuerySet对象 QuerySet对象就像是一个列表,列表存储着查询出的结果,可以迭代,可以切片 Django中QuerySet对象是惰性的,即你得到这个对象的时候并没有真正的在数据库中执行...aggregate 聚合查询是对QuerySet对象进行计算得到一个结果值作为字典中的值放到一个字典中 这里先引入一些聚合方法 from django.db.models import Avg,Min,...1)) 相当于用Q将条件封装,在Q对象之间使用&或者|或者~ 如果想将普通发关键字参数查询与Q查询一起使用,必须将关键字参数查询放到Q的后边 9.扩展查询extra Django 的查询语法难以简练地表达复杂的
第一种方法是从整个查询集生成统计值。比如,你想要计算所有在售书的平均价钱。Django的查询语法提供了一种方式描述所有图书的集合。...查询集参考中列出了聚合函数的列表。 aggregate()是QuerySet 的一个终止子句,意思是说,它返回一个包含一些键值对的字典。键的名称是聚合值的标识符,值是计算出来的聚合值。...annotate()子句的返回结果是一个查询集 (QuerySet);这个 QuerySet可以用任何QuerySet方法进行修改,包括 filter(), order_by(), 甚至是再次应用annotate...这意味着如果你有两个作者同名,那么他们原本各自的查询结果将被合并到同一个结果中;两个作者的所有评分都将被计算为一个平均分。...你也可以在其中使用 data ,这样并不会有副作用,这是因为查询分组中只有这么一个角色了。
(4)unique 如果该值设置为 True, 这个数据字段的值在整张表中必须是唯一的 (5)choices 由二元组组成的一个可迭代对象(例如,列表或元组),用来给字段提供选择项。...可以通过计算查询结果中的每个对象所关联的对象集合,从而得出总计值(也可以是平均值或总和,等等)。 用于分组查询。...如果我们要对两个字段的值做比较,那该怎么做呢? Django 提供 F() 来做这样的比较。F() 的实例可以在查询中引用字段,来比较同一个 model 实例中两个不同字段的值。 ?...此外,update()方法对于任何结果集(QuerySet)均有效,这意味着你可以同时更新多条记录update()方法会返回一个整型数值,表示受影响的记录条数。...每个 QuerySet 都有一个 delete() 方法,它一次性删除 QuerySet 中所有的对象。 例如,下面的代码将删除 pub_date 是2005年的 Entry 对象: ?
QuerySet两个最普遍的途径是: filter(**kwargs)返回一个新的QuerySet,它包含满足查询参数的对象。...首次对QuerySet进行求值 —— 同时发生数据库查询 ——Django 将保存查询的结果到QuerySet的缓存中并返回明确请求的结果(例如,如果正在迭代QuerySet,则返回下一个结果)。...为了方便起见,当需要处理的字段的集合只有一个的时候(集合只有一个!),index_together可以只用一个中括号。也就是只用一个一维列表。...如果您需要更细粒度的控制,请使用元组(或列表)作为list_select_related的值。 空元组将阻止Django调用select_related。 ...例如,这可以基于模型实例(作为关键字参数obj传递)。 使用具有两个或多个外键的模型与同一个父模型 有时可能有多个外键到同一个模型。