方法一:order_by 排序 # 更新时间字段,倒序排序 articles = Article.objects.filter(show_status=True).order_by('-time_created...') # 更新时间字段,正序排序 articles = Article.objects.filter(show_status=True).order_by('time_created') # 更新时间字段...,正序排序 articles = Article.objects.order_by('time_created') 也可以使用两个字段进行排序,当 第一个字段值 相等时,再用 第二个 字段值 来排序 articles...models.Model): title = models.CharField(max_length=128, verbose_name="标题") content = RichTextUploadingField...,除非你显示的使用 order_by 语句来排序
如果对这些东西感到很困惑也不要紧,文末提供了字段类、字段属性、元数据选项等设置的相关说明,不清楚的读者可以稍后查看对应的参考指南。 再次执行迁移操作,先通过模型生成迁移文件,再执行迁移创建二维表。...OK 执行完数据模型迁移操作之后,可以在通过图形化的MySQL客户端工具查看到E-R图(实体关系图)。 利用Django后台管理模型 Django框架有自带的后台管理系统来实现对模型的管理。...我们可以通过manage.py开启Shell交互式环境,然后使用Django内置的ORM框架对模型进行CRUD操作。...> 说明1:由于员工与部门之间存在多对一外键关联,所以也能通过部门反向查询该部门的员工(从一对多关系中“一”的一方查询“多”的一方),反向查询属性默认的名字是类名小写_set(如上面例子中的emp_set...ManyToManyField属性 symmetrical:是否建立对称的多对多关系。 through:指定维持多对多关系的中间表的Django模型。
在当今根据需求而不断调整而成的应用程序中,通常不仅需要能依常规的字段,如字母顺序或创建日期,来对项目进行排序,还需要按其他某种动态数据对项目进行排序。Djngo聚合就能满足这些要求。...联合聚合Joins and aggregates 目前为止,我们聚合查询的field都属于我们要查询的Model,我们也可以用其它Model的field来进行聚合查询,例如: >>> from django.db.models...(Count('book')) 返回的QuerySet的每个publisher都会带一个属性book_count。...就不是在原始的 QuerySet 返回结果中对每个对象中添加注解,而是根据定义在 values() 从句中的字段组合对先结果进行唯一的分组,再根据每个分组算出注解值,这个注解值是根据分组中所有的成员计算而得的...但是上面那样做是行不通的。这是因为默认排序项中的name也是一个分组项,所以这个查询会根据非重复的(data,name)进行分组,而这并不是你本来想要的结果。
exclude() 排除满足条件的对象 annotate() 使用聚合函数 order_by() 对查询集进行排序 reverse() 反向排序 distinct() 对查询集去重...类中的ordering属性对QuerySet中的对象进行排序 Entry.objects.filter(pub_date__year=2005).order_by('-pub_date', 'headline...换句话说,用order_by()方法对QuerySet对象进行操作会返回一个扩大版的新QuerySet对象。因此,使用多值字段对结果进行排序时要格外小心。 没有方法指定排序是否考虑大小写。...可以通过Lower将一个字段转换为小写来排序,它将达到大小写一致的排序: Entry.objects.order_by(Lower('headline').desc()) 可以通过检查QuerySet.ordered...属性来知道查询是否是排序的。
Django 的 ORM 是创建 SQL 去查询和操作数据库的一个 Python 式的方式。 通过 django 创建的数据库模型 ? 续 ? 生成的 mysql 数据库表 ?...ORM和数据库关系 在 Django 中 model 是数据的单一、明确的信息来源。它包含了存储的数据的重要字段和行为。通常,一个模型(model)映射到一个数据库表。...Django基础篇-模型基础 基本情况: 每个模型都是一个 Python 类,它是 django.db.models.Model 的子类。 ? 模型的每个属性都代表一个数据库字段。... Tb.objects.values(*field) 返回一个 ValueQuerySet — 一个特殊的 QuerySet,运行后得到的并不是一系列 model 的实例化对象,而是一个可迭代的字典序列... Tb.objects.reverse() 对查询结果反向排序,请注意 reverse() 通常只能在具有已经定义顺序的 QuerySet 上调用(在 model 类的 Meta 中指定 ordering
=Min('books__price'), max_price=Max('books__price')) 这段代码告诉 Django 获取书店模型,并连接(通过多对多关系)图书模型,然后对每本书的价格进行聚合...例如,根据一本图书作者数量的多少对查询集 QuerySet进行排序: >>> Book.objects.annotate(num_authors=Count('authors')).order_by('...不是在原始的 QuerySet返回结果中对每个对象中添加注解,而是根据定义在values() 子句中的字段组合对先结果进行唯一的分组,再根据每个分组算出注解值, 这个注解值是根据分组中所有的成员计算而得的...在做计数时,就会表现地格外明显: 通过例子中的方法,假设有一个这样的模型: from django.db import models class Item(models.Model): name...但是上面那样做是行不通的。这是因为默认排序项中的 name也是一个分组项,所以这个查询会根据非重复的 (data, name) 进行分组,而这并不是你本来想要的结果。
在Django MVC概述和开发流程中已经讲解了Django的MVT开发流程,本文重点对MVT中的模型(Model)进行重点讲解。 配置MySQL数据库 确保已经安装了操作mysql的包。...更加完整的介绍参考Django 1.8.2 中文文档 字段选项 通过选项实现对字段的约束,常用选项如下: 选项 描述 default 字段默认值 primary_key 主键约束。...exclude 返回表中不满足条件的数据。 QuerySet对象 参数为查询条件。 order_by 对查询结果进行排序。 QuerySet对象 参数为需要排序的字段。...order_by('age')表示通过年龄升序排序order_by('-age')表示通过年龄降序排序 返回值为QuerySet对象的多个函数可以连接在一起查询,比如StudentInfo.objects.filter...StudentInfo.objects.filter(~Q(id__gt=3)) 聚合 对QuerySet对象调用aggregate方法表示 对查询结果进行聚合操作,返回的是一个字典,使用前需导入相应的聚合类
json的键值对,而不是列表 request.body就是form表单的数据 Queryset Django ORM用到三个类:Manager、QuerySet、Model。...QuerySet实例 就是从数据库根据自己要求拿数据的 连数据都那不出来,写啥视图 所以在编写queryset必须用django shell 调试 在model中,Django通过给Model增加一个objects...exclude() 排除满足条件的对象 annotate() 使用聚合函数 order_by() 对查询集进行排序 reverse() 反向排序 distinct() 对查询集去重...当我们需要对查询集(queryset)的某些字段进行计算或进行先分组再计算或排序, 我们就需要使用aggregate和annotate方法了。...这样就可以引用模型字段值并使用它们执行数据库操作,而无需实际将它们从数据库中拉出到Python内存中 说白了就是我从数据库拿东西,但是有些需要的字段没有,要通过绑定的外键的app的model拿。
方法:order_by 用法:MyModel.objects.order_by (’- 列’,‘列’) 作用: 与 all () 方法不同,它会用 SQL 语句的 ORDER BY 子句对查询结果进行根据某个字段选择性的进行排序...abook.market_price = "10.5" abook.save() 2.通过 QuerySet 批量修改 对应的全部字段 直接调用 QuerySet 的 update (属性 =...__gt=65) auths.delete() 聚合查询 聚合查询是指对一个数据表中的一个字段的数据进行部分或全部进行统计查询,查bookstore_book数据表中的全部书的平均价格,查询所有书的总个数等...作用: 通常是对数据库中的字段值在不获取的情况下进行操作 用于类属性 (字段) 之间的比较。...F F('列名') 说明: 一个 F () 对象代表了一个 model 的字段的值 F 对象通常是对数据库中的字段值在不加载到内存中的情况下直接在数据库服务器端进行操作 示例 1 更新 Book
注意:我们在添加属性的时候如果影响了表结构,就需要迁移,default和blank不影响表结构。 更多模型字段,请参考Django官方文档。写的明明白白。...查询 我们在Django中通过操作模型类去做增删改查,sql语句那么多,我们同样可以进行增删改查。 其中最复杂的也就是查询了。下面我们来看一下。...查询函数 我们在Django中通过:模型类.objects属性调用以下函数来进行查询 get: 返回表中满足条件的一条数据,有且只能有一条,查询出多条会报异常。 查询不到数据也会报异常。...exclude: 返回不满足此条件的,也是可以返回多条数据,返回类型也是QuerySet。 order_by: 对查询的结果进行排序,返回类型也是QuerySet。...student.objects.all().order_by('-id') 也可以根据多个字段排序 根据id和age进行排序 student.objects.all().order_by('id','
在Django中具体的对应方式为: 类名对应数据库中的表名 类名对应数据库中的表名 类属性对应数据库里的字段 类实例对应数据库表里的一行数据 类实例对象的属性对应这行中的字段的值 一.数据库的连接 Django...一对一的创建即在外键创建好后给school_id添加UNIQUE=True的属性 3.多对多 teacher=models.ManyToManyField(teacher) 这样Django会默认添加一张表为...——一个特殊的QuerySet,运行后得到的并不是一系列 model的实例化对象,而是一个可迭代的字典序列 exclude(**kwargs): 它包含了与所给筛选条件不匹配的对象 order_by(*...field): 对查询结果排序 reverse(): 对查询结果反向排序 distinct(): 从返回结果中剔除重复纪录 values_list(*field): 它与values()非常相似,它返回的是一个元组序列...使用’__’进行的查找 一对多 school_name为外键对象的字段 school为student表中设置的外键字段 student1=student.objects.filter(id=2).values
并提供了一个简介漂亮的定义数据库字段的语法。 每个模型相当于单个数据库表(多对多关系例外,会多生成一张关系表),每个属性也是这个表中的字段。...——一个特殊的QuerySet,运行后得到的并不是一系列 model的实例化对象,而是一个可迭代的字典序列 # exclude...是惰性的 Django的queryset对应于数据库的若干记录(row),通过可选的查询来过滤。...是具有cache的 当你遍历queryset时,所有匹配的记录会从数据库获取,然后转换成Django的model。...聚合查询和分组查询 aggregate(*args,**kwargs): 通过对QuerySet进行计算,返回一个聚合值的字典。
魔鬼的陷阱 QuerySet 的类型 有时候希望它简单一点 有时候希望它坚持自我 多对多和 values() ORM 终究只是 ORM 隐式转换 Mysql 低版本时间精度问题 虚假的 .query...魔鬼的陷阱 QuerySet 的类型 有时候希望它简单一点 objects.values() 返回的并不是简单类型的数据,而是 QuerySet。...但实际情况是,使用 values() 会改变 queryset._iterable_class ,如果后面还有更多的级联查询,会导致最后的结果为 Dict 而不是 QuerySet。...print(type(f2.created)) 通过以上的例子就能知道,我们自己创建的内存对象 f1 和通过 orm 拿出来的内存对象 f2 完全不是同一个东西,虽然他们都可以操作同一条数据库记录,但如果在内存对象里做比较就会有很多问题...虚假的 .query 我们常常用 queryset.query 去检查复杂的查询语句,但实际上 query 属性并不能真实反应提交到 DB 中的 sql ,可以参考如下链接: QuerySet.query
Django ORM框架的功能: 建立模型类和表之间的对应关系,允许我们通过面向对象的方式来操作数据库。 根据设计的模型类生成数据库中的表格。 通过方便的配置就可以进行数据库的切换。...3.2使用update方法直接设置对就的属性 Publish.objects.filter(id=2).update(name="北京出版社") 注意:update()是QuerySet对象的一个方法...,运行后得到的并不是一系列model的实例化对象,而是一个可迭代的字典序列 exclude(**kwargs) 包含了与所给的筛选条件不匹配的对象 order by(*field)...类中的ordering属性对QuerySet中的对象进行排序 Student.objects.filter(school="阳关小学").order_by('-age', 'name') ...当查询跨越多张表的数据时,QuerySet可能得到重复的结果,这时候可以使用distinct()进行去重。
) order_by(*field): queryset类型的数据来调用,对查询结果排序,默认是按照id来升序排列的,返回值还是queryset类型...reverse(): queryset类型的数据来调用,对查询结果反向排序,返回值还是queryset类型 count(): queryset...2. select_related使用SQL的JOIN语句进行优化,通过减少SQL查询的次数来进行优化、提高性能。...对于多对多字段(ManyToManyField)和一对多字段,可以使用prefetch_related()来进行优化。...,但是这种方式会将所有字段的数据都重新的赋值一遍(不是是不是需要更新的字段值),效率偏低,但是也是一种方式 此外,update()方法对于任何结果集(QuerySet)均有效,这意味着你可以同时更新多条记录
', ] # DjangoFilterBackend # 使用默认的过滤 在View中添加filter_backends属性,设置过滤方式DjangoFilterBackend,并且设置过滤的属性。...可以通过最小的价格、最大的价格,和模糊查询名字去过滤想要的数据。...在filter_backends中添加SearchFiler,然后再在search_fields中添加需要搜索的字段即可,在搜索的字段前面字符变量来提高搜索效率。...= GoodsFilter search_fields = ("=name", 'goods_brief', 'goods_desc') # OrderingFilter 可以对数据进行排序筛选数据...,即可通过该属性名进行相应的筛选。
商品列表后台接口 序列器 view代码 url代码 实现分页(传limit offset) 实现根据字段进行排序和模糊搜索 商品分类查询 view代码 url代码 前端调用的书写 在分类查询的基础上面...,需要排序 根据生产厂商进行选择 view url 前段传参 商品的详情 view url 前端如何传参 查询的外键需要返回具体的name值,而不是id 第一种方法 第二种方法 实现用户的登录 用户的详情...订单 订单列表展示 序列器 view url 下单操作,删除操作 view url 需求 做一个电商项目,就是卖不同品牌的电脑,可以根据不同的品牌进行查询,还有对订单的crud,还有用户的会员中心功能模块...实现根据字段进行排序和模糊搜索 以上可以实现对列表的查询,并且实现了分页,但是现在我们想要根据某一个字段进行排序和模糊搜索,我们可以在对应的接口里面的view代码里面这样配置 filter_backends...') 这样写了之后,前端调用这个接口,需要根据某一个字段进行排序,可以这样传 http://127.0.0.1:8000/computer/product_list/?
然而,model参数并不是唯一能够指明视图要基于哪个对象进行操作的方法 – 你同样可以使用queryset参数来指定一个对象列表: from django.views.generic import DetailView...然而,通过使用queryset来定义一个过滤的对象列表,你可以更加详细 的了解哪些对象将会被显示的视图中(参见执行查询来获取更多关于查询集对象的更对信息,以及参见 基于类的视图参考来获取全部 细节)。...我们可能想要对图书列表按照出版日期进行排序来选择一个简单的例子,并且把 最近的放到前面: from django.views.generic import ListView from books.models...当然,你通常想做的不仅仅只是 对对象列表进行排序。...如果我们不这么做,通过视图会使用和 “vanilla” 对象列表名称一样的模板,这可 能不是我们想要的。 另外需要注意,这并不是处理特定出版商的图书的非常优雅的方法。
类型的数据来调用,对查询结果排序,默认是按照id来升序排列的,返回值还是queryset类型。...'-price'),order_by('price','id')是多条件排序,按照price进行升序,price相同的数据,按照id进行升序 reverse() queryset类型的数据来调用,对查询结果反向排序...,就是通过limit 1,取一条来看看是不是有数据 values(*field) 用的比较多,queryset类型的数据来调用,返回一个ValueQuerySet——一个特殊的QuerySet,运行后得到的并不是一系列...objects Model(行记录对象) exclude 匹配非条件的对象 objects QuerySet order_by 对查询结果进行排序 QuerySet QuerySet reverse...对查询结果反向排序 QuerySet QuerySet count 返回匹配查询的对象数量 QuerySet int first 返回第一条记录 QuerySet Model last 返回最后一条记录
2.serializer序列化model 使用Django自带的model_to_dict()方法可以实现直接将模型数据转化为字典形式,但是对于DateTimeField、ImageField等字段时还是无法序列化...三、DRF的使用 1.DRF的Request和Response类 DRF对Django的Request和Response类进行了进一步的封装,因此使用起来更方便。...过滤的使用 通过django-filters的DjangoFilterBackend类实现字段过滤。...显然,字符限制只是对指定的字段起作用,其他字段并不受影响,可以根据需要选择。...此时实现了按照指定字段进行排序。