您现在的位置是:首页 > Javascript
当前栏目
Django自定义ID自增
2023-02-19 12:23:53 时间
ID自增
Django models里面ID自增通常使用models.AutoField(auto_created=True, primary_key=True)来定义主键,但是如何自定义ID自增怎么做呢?类似于在ID前面添加固定字符串如:AE8600000001、AE8600000002、AE8600000003……
案例分析
很显然上面的AutoField字段不能使用,因为AutoField字段是IntegerField字段,所以不能将pk用来AE860000001,从目标字段来看,很显然是字符串类型,所以只能将字段类型改为CharField,但是呢,如果数据量巨大,字符串作为主键显然是不理智的选择,这样会严重影响到查询性能问题,但是也不是不可使用。这样必须重写models里面的save方法,达到字段自增的目的(其实也可以用另外一张表记录ID游标的方式也可,但是个人觉得比较麻烦,不知道有没有大神知道更为简便的方法)。
获取最大值ID
弊端
重写save方法固然好用,但是有一种创建数据的方式不行,那就是批量创建的方法不适用,因为它的底层不调用save方法,objects.bulk_create这个方法,咱们可以看一下底层源码:
写到这里,估计你们会产生疑问,这样写会不会出现问题,在生产环境能用吗?如果多个用户同时尝试,那么他就会发生IntegrityError错误。你们可以试试……
自定义方法
上面的方法存在一定的弊端,如果咱们每次重写save方法的时候去查询一下目前表里面的数量,创建临时字段ID,在此基础上加1是否可行?
这种发法也会和上面一样,如果多用户使用,也会产生IntegrityError错误。啊啊啊,有没有大神求教,目前只能这样实现了。
相关文章
- JDK中内嵌JS引擎介绍及使用
- 49195,npm最后的疯狂?盘点10款最有前途JavaScript构建工具
- 译文:5个增强Node.js应用程序增强功能
- 4个例子,吃透 JavaScript 实现的二叉搜索树 BST
- Vue中使用XML和JSON格式互转插件
- JDK中Jshell简单使用(JDK9版本以上或者JDK9版本)
- shiro中的JSP标签支持
- Java技术点-json转对象,对象转json
- SpringBoot+SpringDataJpa @Query之 JPQL使用书写模板(模糊查询and条件查询)
- Spring Boot中的Freemarker模版引擎引用css和js的正确姿势
- Node.js解压版的环境配置及相关常用命令
- JSP学习笔记(6)—— 自定义MVC框架
- JSP学习笔记(5)——Servlet、监听器、过滤器、MVC模式介绍
- Jsp学习笔记(4)——分页查询
- APIJSON简单使用
- JSP学习笔记(3)——JSTL 标签库
- JSP学习笔记(1)——Jsp指令、动作元素和内置对象
- JavaScript ES6 Promise对象
- Web前端——JavaScript扩展补充
- Web前端——表单提交和Js添加选项