基于django 的orm中非主键自增的实现方式


Posted in Python onMay 18, 2020

我们知道django的orm想实现自增,可以直接使用AutoField字段既可以实现,但是这种情况必须要求此字段是主键,但是我们知道主键只能是一个。

如果我已经有了一个主键,但是又需要另外一个字段为唯一自增字段,这该如何实现呢?

本人的解决办法如下,供大家参考,也欢迎大家提供更多的实现方式,互相学习。

class ProductSpu(models.Model):
  """
  商品表
  """
  _database = 'payment'

  id = models.UUIDField(primary_key=True, default=uuid.uuid4, db_column='c_id')
  product_no = models.IntegerField('商品号', blank=True, auto_created=True, db_column='c_product_no')
  name = models.CharField(verbose_name='商品名称', max_length=100, db_column='c_name')

如上,product_no字段是我要实现的自增字段,

(1)首先设置此字段为IntegerField类型,并设置属性值auto_created=True;

(2)生成数据库的sql语句设置如下:

CREATE TABLE `ehr-payment`.`t_product_spu` (
 `c_id` char(32) NOT NULL,
 `c_product_no` int(11) NOT NULL AUTO_INCREMENT COMMENT '商品编码',
 `c_name` varchar(100) NOT NULL COMMENT '商品名称',
 PRIMARY KEY (`c_id`),
 UNIQUE KEY `c_product_no` (`c_product_no`)
) ENGINE=InnoDB AUTO_INCREMENT=100001 DEFAULT CHARSET=utf8 COMMENT='商品表';

经过如上两点配合设置,新增一条数据是会自动填充自增字段product_no,其中通过sql配置 AUTO_INCREMENT=100001,实现自增字段开始的值。如,此例是从100001开始自增。

补充知识:django关于自增id的问题

在django中,如果创建模型。不指定id。django会自动自定一个id

class Student(models.Model):
  name = models.CharField(max_length=16)
  sex = models.CharField(max_length=4)

像这种情况。django会自动添加一个自增id

在数据库的表结构为

id name sex

相当于

class Student(models.Model):
  id = models.AutoField(primary_key=True)
  name = models.CharField(max_length=16)
  sex = models.CharField(max_length=4)

然后这id是自增的。

如果需要自定义id,然后这个id值是可用自己定义。那么就需要这样做即可

class Student(models.Model):
  u_id = models.IntegerField(primary_key=True)
  name = models.CharField(max_length=16)
  sex = models.CharField(max_length=4)

把AutoField 修改为IntegerField 即可

这样创建的数据。数据库的id值。就不是自增的。可用在插入sql的时候指定 u_id 的值为3,6,8等。

但是不能重复、

以上这篇基于django 的orm中非主键自增的实现方式就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
详解Python中的正则表达式的用法
Apr 09 Python
Python2.7简单连接与操作MySQL的方法
Apr 27 Python
python对html过滤处理的方法
Oct 21 Python
python 2.7 检测一个网页是否能正常访问的方法
Dec 26 Python
Python如何使用Gitlab API实现批量的合并分支
Nov 27 Python
Python原始套接字编程实例解析
Jan 29 Python
django 扩展user用户字段inlines方式
Mar 30 Python
python_matplotlib改变横坐标和纵坐标上的刻度(ticks)方式
May 16 Python
浅析Python 抽象工厂模式的优缺点
Jul 13 Python
Jupyter notebook命令和编辑模式常用快捷键汇总
Nov 17 Python
总结python 三种常见的内存泄漏场景
Nov 20 Python
python实现无边框进度条的实例代码
Dec 30 Python
Mysql数据库反向生成Django里面的models指令方式
May 18 #Python
Jupyter notebook快速入门教程(推荐)
May 18 #Python
解决django 向mysql中写入中文字符出错的问题
May 18 #Python
Anaconda3中的Jupyter notebook添加目录插件的实现
May 18 #Python
python实现人像动漫化的示例代码
May 17 #Python
django日志默认打印request请求信息的方法示例
May 17 #Python
使用pyecharts1.7进行简单的可视化大全
May 17 #Python
You might like
PHP生成不重复标识符的方法
2014/11/21 PHP
FastCGI 进程意外退出造成500错误
2015/07/26 PHP
PHP关于foreach复制知识点总结
2019/01/28 PHP
实现复选框全选/全不选切换
2006/12/23 Javascript
IE6下通过a标签点击切换图片的问题
2010/11/14 Javascript
再谈querySelector和querySelectorAll的区别与联系
2012/04/20 Javascript
完美解决AJAX跨域问题
2013/11/01 Javascript
JavaScript中双叹号!!作用示例介绍
2014/09/21 Javascript
js编写三级联动简单案例
2016/12/21 Javascript
JS多文件上传的实例代码
2017/01/11 Javascript
数组Array的一些方法(总结)
2017/02/17 Javascript
nodejs使用express创建一个简单web应用
2017/03/31 NodeJs
详解Vue中状态管理Vuex
2017/05/11 Javascript
微信小程序城市定位的实现实例(获取当前所在国家城市信息)
2017/05/17 Javascript
详解vue-cli开发环境跨域问题解决方案
2017/06/06 Javascript
layui table表格数据的新增,修改,删除,查询,双击获取行数据方式
2019/11/14 Javascript
javascript设计模式 ? 外观模式原理与用法实例分析
2020/04/15 Javascript
vue-cli打包后本地运行dist文件中的index.html操作
2020/08/12 Javascript
简单上手Python中装饰器的使用
2015/07/12 Python
python开发之tkinter实现图形随鼠标移动的方法
2015/11/11 Python
Python用list或dict字段模式读取文件的方法
2017/01/10 Python
Python numpy 常用函数总结
2017/12/07 Python
浅析PyTorch中nn.Linear的使用
2019/08/18 Python
如何使用selenium和requests组合实现登录页面
2020/02/03 Python
tf.concat中axis的含义与使用详解
2020/02/07 Python
解决Keras自带数据集与预训练model下载太慢问题
2020/06/12 Python
女士时装鞋:Chinese Laundry
2018/08/29 全球购物
成人毕业生自我鉴定
2013/10/18 职场文书
培训讲师岗位职责
2014/04/13 职场文书
《沙漠中的绿洲》教学反思
2014/04/24 职场文书
2014年幼儿园教学工作总结
2014/12/04 职场文书
大学生操行评语大全
2014/12/31 职场文书
碧霞祠导游词
2015/02/09 职场文书
立项申请报告范本
2015/05/15 职场文书
2015年数学教师工作总结
2015/05/20 职场文书
自考生自我评价
2019/06/21 职场文书