可以看到,当已经存在收藏时再重复添加,就会返回non_field_errors错误,是在两个及以上字段联合验证失败时返回错误信息的关键字段,前端在接收后可以进行相应处理。...现进行测试如下: ? 可以看到,先在DRF后台增加收藏,然后在Postman中模拟访问获取到JWT后再删除,显然,只能删除用户自己的收藏,而不能删除其他用户的收藏。...3.前端Vue实现收藏功能 GenericAPIView有一个属性为lookup_field,用于执行单个模型实例的对象查找的模型字段,即查询单一数据库对象时使用的条件字段,默认为pk,即主键。...在api.js中这些接口修改如下: /收藏 export const addFav = params => { return axios.post(`${local_host}/userfavs/`,...+'/') } 现进行测试如下: ?
我们在官网对EasyNVR运行进行了测试,发现本次测试中录像播放不出来,查看返回的录像地址发现路径拼接错误: image.png 于是查找了对应接口,发现路径是在mediaserver/tsingsee.ini...中配置的: image.png 经过测试后发现,当路径配置为相对路径时返回的数据是正确的,但是为绝对路径就会出错。...通过打断点调试后了解到,是因为官网配置文件里的绝对路径后面多了一个斜杠,虽然直接删除斜杠就能返回正确的路径数据,但是在实际给用户使用时不知道用户自己配置会不会加上斜杠,所以需要在代码里做兼容处理,直接使用...strings.TrimRight去除后面的斜杠: image.png 修改后运行测试录像路径返回正常,回看可以正常播放。
我们在官网对EasyNVR运行进行了测试,发现本次测试中录像播放不出来,查看返回的录像地址发现路径拼接错误: 于是查找了对应接口,发现路径是在mediaserver/tsingsee.ini中配置的:...image.png 经过测试后发现,当路径配置为相对路径时返回的数据是正确的,但是为绝对路径就会出错。...通过打断点调试后了解到,是因为官网配置文件里的绝对路径后面多了一个斜杠,虽然直接删除斜杠就能返回正确的路径数据,但是在实际给用户使用时不知道用户自己配置会不会加上斜杠,所以需要在代码里做兼容处理,直接使用...strings.TrimRight去除后面的斜杠: 修改后运行测试录像路径返回正常,回看可以正常播放。
Django自带的转换器有str(没有设置转换器时的默认类型)、int、slug、uuid、path。也可以自定义转换器。 3....命名URL模式 在 path() 或者 re_path() 中使用name参数能够命名URL模式,这样在单元测试的时候,就能方便地使用 reverse() 拿到对应的url。...比如: urlpatterns = [ path('temp//', todo_views.temp, name='index'), ] 复制代码 在单元测试时,使用如下的方式测试该接口是否返回状态码...choices中,元组的第一个值是实际要赋给某字段的值,第二个值是便于阅读的内容。 (1) 执行以下指令,把对model的修改存储为migration(迁移)。...中使用select * from todo limit 20;查找数据,得到: 图-3 3.查找数据 (1) 使用 all() 方法查找所有的数据: >>> Todo.objects.all() QuerySet
返回数字: count() 数据准备 接着前面的User表,测试数据如下 user_name psw mail yoyo 123456 283340479@qq.com yoyo2 111111 1...找不到的时候给个默认值null from django.http import HttpResponse from hello.models import User def sele_filter(request...): '''获取user_name="yoyo" and psw="123456"对应的mail值 查找为空时,返回null''' r = "" ret = User.objects.filter...查找用户名不是”yoyo”的数据 et=User.objects.exclude(user_name=”yoyo”) order_by() 对查询结果排序 由queryset对象调用,返回值是...包含数据,就返回True,否则返回False 由queryset对象调用 返回值布尔值 exists: 由queryset对象调用 返回值布尔值 is_exist=User.objects.all
属性: model: 视图要显示的模型 queryset: 表示对象的一个查询集.queryset的值优先于model的值. template_name: 字符串表示的模板名称. context_object_name...方法: get_queryset():返回用来获取本视图显示对象的queryset.如果设置了queryset属性,get_queryset()默认返回它的值. get_object(queryset=...None):返回该视图要显示的单个对象.如果提供了queryset,该queryset将作为对象的查询源,否则,将使用get_queryset().get_object()从视图的所有参数中查找pk_url_kwarg...参数,如果找到了这个参数,该方法使用这个参数的值执行一个基于逐渐的查询.如果这个参数没有找到,该方法查找slug_url_kwarg参数,使用slug_field字段执行针对slug的查询.当query_pk_and_slug...,并重定向到get_success_url(),可以覆盖该方法在以上行为之间添加额外的动作.该方法必须返回一个HttpResponse. form_invalid(form):如果表单验证失败,则使用已填充的表单数据和错误信息重新渲染上下文
第一种方法是从整个QuerySet生成摘要值。例如,想计算所有在售图书的平均价格。Django的查询语法提供了一种描述所有藏书的方法。 传递给聚合()的参数描述了要计算的聚合值。...如果要指定聚合值的名称,可以在指定聚合子句时提供指定的名称。...但是,有时要聚合的值属于所查询模型的关联模型。 在聚合函数中指定聚合字段时,Django允许您在筛选相关字段时使用相同的双下划线符号。Django将处理需要检索和聚合相关值的任何表连接。...(num_authors=Count('authors')) annotate()和filter()子句的顺序¶ 在开发涉及annotate()和filter()子句的复杂查询时,请特别注意应用于QuerySet...因此,如果有疑问,请使用str(queryset.query)`检查SQL并编写大量测试。
目录 Django ORM单表操作 Django 测试环境搭建 ORM 创建表 ORM 添加数据 ORM 查询数据 all 查询 filter 查询 exclude 取反查询 get 查询 order_by...ORM单表操作 Django 测试环境搭建 注意pycharm链接数据库都需要提前下载对应的驱动,自带的sqlite3对日期格式数据不敏感,如果后续业务需要使用日期辅助筛选数据那么不推荐使用sqlite3...return HttpResponse("查找成功!...books=models.Book.objects.filter(pk__in=[1,2]).delete() 注意: Django 删除数据时,会模仿 SQL约束 ON DELETE CASCADE...的行为,也就是删除一个对象时也会删除与它相关联的外键对象; delete() 方法是 QuerySet 数据类型的方法,但并不适用于 Manager 本身。
2.django提供了两种生成聚合的方法 1)从整个查询集生成统计值,主要用法:aggregate(*args, **kwargs) aggregate()是QuerySet 的一个终止子句,也就是说...aggregate返回一个字典,包含根据QuerySet 计算得到的聚合值(平均数、和等等)。...我们想要汇总QuerySet.中每本书里的这种关系。逐个对象的汇总结果可以由annotate()子句生成。当annotate()子句被指定之后,QuerySet中的每个对象都会被注上特定的值。...发现aggregate 和 annotate用法的区别了吗,再次举例如下(在聚合函数中指定聚合字段时,Django 允许你使用同样的 双下划线 表示关联关系,): >>> from django.db.models...__startswith="Django").annotate(num_authors=Count('authors')) # 使用annotate() 子句时,过滤器有限制注解对象的作用。
可以使用下列方法对QuerySet提交查询操作: 迭代:QuerySet是可迭代的,在首次迭代查询集时执行实际的数据库查询。...list():对QuerySet调用list()将强制提交操作entry_list = list(Entry.objects.all()) bool() 测试布尔值,像这样: if Entry.objects.filter...,而是在一个预取的QuerySet缓存中查找。...在Django1.11在defaults中增加了对可调用值的支持。...在Django1.11在defaults中增加了对可调用值的支持。
'django_filters', ] Django-filter 已针对所有支持的 Python 和Django版本以及最新版本的 Django REST Framework ( DRF ) 进行了测试..., name, value): return queryset.filter(**{ name: value, }) 声明过滤器 声明式语法在创建过滤器时为您提供了最大的灵活性...您可以使用 Django 的__语法遍历“关系路径”来过滤相关模型上的字段。 例如:manufacturer__name。 lookup_expr: 过滤时使用的字段查找。...Django 的查找参考中提供了查找表达式的详细说明。django-filter 支持包含转换和最终查找的表达式。...过滤器查找类型“精确”是隐式默认值,因此永远不会添加到过滤器名称中。在上面的示例中,发布日期的确切过滤器是`release_date`,而不是`release_date__exact`。
, 属性2=值2) 返回值: QuerySet 容器对象,内部存放 MyModel 实例 说明: 当多个属性在一起时为 "与" 关系,即当 Books.objects.filter(price=20,...__range: 查找数据是否在指定的区间范围内 # 查找年龄在某一区间内的所有作者 Author.objects.filter(age__range=(35,50)) # 等同于 SELECT ......(id=1) auth.delete() except: print(删除失败) 删除查询结果集 步骤 查找查询结果集中满足条件的全部 QuerySet 查询集合对象 调用查询集合对象的...中的游标cursor对数据库进行 增删改查 操作 在 Django 中跨过模型类直接操作数据库 使用步骤: 导入 cursor 所在的包 Django 中的游标 cursor 定义在 django.db.connection...提供了比较完善的后台管理数据库的接口,可供开发过程中调用和测试使用 django 会搜集所有已注册的模型类,为这些模型类提拱数据管理界面,供开发者使用 使用步骤: 建后台管理帐号: 后台管理–创建管理员帐号
反序列化应用场景示例:从别的API获取数据,在Python里处理。...删除数据: http://127.0.0.1:8000/myapp/api/user/3/ 查看结果: http://127.0.0.1:8000/myapp/api/user/ 错误返回值优化...-> 调用序列化器的.save()方法保存数据 序列化器常用方法与属性: serializer.is_valid():调用序列化器验证是否通过,传入raise_exception=True可以在验证失败时由...serializer.data:获取序列化器返回的数据 serializer.save():将验证通过的数据保存到数据库(ORM操作) 常用参数 通用参数 DRF序列化器:扩展验证规则 如果常用参数无法满足验证要求时,...局部钩子:validate_字段名(self, 字段值) 全局钩子:validate(self, 所有校验的数据字典)
为此,可以基于用户值进行筛选。...通用筛选器还可以在可浏览 API 和管理 API 中显示为 HTML 控件。...category=clothing&in_stock=True 4.搜索器过滤 4.1 多字段查找 仅当视图具有属性集时,才会应用该类。...username', 'email', 'profile__profession'] 4.3 嵌套查找 对于 JSONField 和 HStoreField 字段,您可以使用相同的双下划线表示法根据数据结构中的嵌套值进行查找...(目前只支持Django的PostgreSQL后端。 ‘$’ 正则表达式搜索。
查找类型分类整理 单词 特别点 本文将翻译 django 官网的 模型层的 QuerySet 章节 文档版本:1.11 Making queries 进行查询 一旦你创建了 数据表模型类,django...django(ORM)中,数据库与 python 对象的映射关系十分形象,一个表模型类(class)即代表一张表,实例化出一个对象即代表一条数据记录 创建一个对象(一条数据记录) 在 django...() 来更高效的获取数据条数 用 list() 把 QuerySet 强制转换成 list 时 强转成 bool 类型或者 作为 if 条件 时 如果 QuerySet 的查询结果至少有一个(数据对象...调用 .none() 方法会创建一个空的 QuerySet ,里面不包含任何数据对象,并且在取值时也不会执行任何数据库操作(是 EmptyQuerySet 的实例) Entry.objects.none...(字段查询条件,双下划线查询) 此部分参考文档: django官网 字段查找(field-lookups) 字段查找(field-lookups)对应的是 SQL 语句中的 WHERE 条件,一般放在
distinct(): 从返回结果中剔除重复纪录(如果你查询跨越多个表,可能在计算QuerySet时得到重复的结果。...换句话说,在关联的任何一端,都不需要再调用save()方法。 聚合查询和分组查询 聚合 aggregate()是QuerySet 的一个终止子句,意思是说,它返回一个包含一些键值对的字典。...如果我们要对两个字段的值做比较,那该怎么做呢? Django 提供 F() 来做这样的比较。F() 的实例可以在查询中引用字段,来比较同一个 model 实例中两个不同字段的值。...ORM执行原生的SQL # extra # 在QuerySet的基础上继续执行子语句 # extra(self, select=None, where=None, params=None, tables...终端打印SQL语句 在Django项目的settings.py文件中,在最后复制粘贴如下代码: LOGGING = { 'version': 1, 'disable_existing_loggers
distinct(): 从返回结果中剔除重复纪录(如果你查询跨越多个表,可能在计算QuerySet时得到重复的结果。...换句话说,在关联的任何一端,都不需要再调用save()方法。 聚合/分组及 聚合 aggregate()是QuerySet 的一个终止子句,意思是说,它返回一个包含一些键值对的字典。...如果我们要对两个字段的值做比较,那该怎么做呢? Django 提供 F() 来做这样的比较。F() 的实例可以在查询中引用字段,来比较同一个 model 实例中两个不同字段的值。...终端打印SQL语句 在Django项目的settings.py文件中,在最后复制粘贴如下代码: LOGGING = { 'version': 1, 'disable_existing_loggers...在Python脚本中调用Django环境 import os if __name__ == '__main__': os.environ.setdefault("DJANGO_SETTINGS_MODULE
MySQL PyMySQL(纯python的mysql驱动程序) 3 在django的项目中会默认使用sqlite数据库,在settings里有如下设置: ?...要真正从数据库获得数据,你可以遍历queryset或者使用if queryset,总之你用到数据时就会执行sql....是具有cache的 当你遍历queryset时,所有匹配的记录会从数据库获取,然后转换成Django的model。...当queryset非常巨大时,cache会成为问题 处理成千上万的记录时,将它们一次装入内存是很浪费的。...所以使 #用iterator()的时候要当心,确保你的代码在操作一个大的queryset时没有重复执行查询 总结: queryset的cache是用于减少程序对数据库的查询,在通常的使用下会保证只有在需要的时候才会查询数据库
一、orm查询 1.1配置测试脚本 为了方便我们测试SQL语句,我们需要配置一下tests.py文件,在这里测试我们的SQL语句,单独测试Django中的py文件都可以这样配置。....settings") import django django.setup() # 一定要等待测试脚本搭建完毕之后 才能导入django文件进行测试 from app01...import models 第二种方法: 直接新建一个名称任意的py文件,在里面写上上面的配置 1.1.1Django终端打印SQL语句的配置 在settings里面随便找个地方复制下面的代码即可在终端看到...1.2.6values() values()获取数据对象中指定的字段的值,可以有多个,这里以queryset对象列表套字典的形式返回。...all()方法,且得到的就是作者对象,当一本书有多个作者时需要用all()方法,且得到的是QuerySet列表。
领取专属 10元无门槛券
手把手带您无忧上云