基于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中实现字符串类型与字典类型相互转换的方法
Aug 18 Python
Python正则获取、过滤或者替换HTML标签的方法
Jan 28 Python
浅谈Python中用datetime包进行对时间的一些操作
Jun 23 Python
python3使用pyqt5制作一个超简单浏览器的实例
Oct 19 Python
Python实现Pig Latin小游戏实例代码
Feb 02 Python
pandas 选择某几列的方法
Jul 03 Python
对python操作kafka写入json数据的简单demo分享
Dec 27 Python
Django实现跨域的2种方法
Jul 31 Python
python数组循环处理方法
Aug 26 Python
python MultipartEncoder传输zip文件实例
Apr 07 Python
高考考python编程是真的吗
Jul 20 Python
关于Kotlin中SAM转换的那些事
Sep 15 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加MYSQL服务器
2006/10/09 PHP
wordpress自定义标签云与随机获取标签的方法详解
2019/03/22 PHP
Yii框架应用组件用法实例分析
2020/05/15 PHP
js下判断 iframe 是否加载完成的完美方法
2010/10/26 Javascript
Jquery Ajax的Get方式时需要注意URL地方
2011/04/07 Javascript
javascript 进阶篇3 Ajax 、JSON、 Prototype介绍
2012/03/14 Javascript
javascript操作数组详解
2014/12/17 Javascript
js实现鼠标悬浮给图片加边框的方法
2015/01/30 Javascript
jQuery进行组件开发完整实例
2015/12/15 Javascript
NodeJS配置HTTPS服务实例分享
2017/02/19 NodeJs
随机生成10个不重复的0-100的数字(实例讲解)
2017/08/16 Javascript
详解Nodejs 通过 fs.createWriteStream 保存文件
2017/10/10 NodeJs
使用vue2实现购物车和地址选配功能
2018/03/29 Javascript
vue.js打包之后可能会遇到的坑!
2018/06/03 Javascript
JS实现的类似微信聊天效果示例
2019/01/29 Javascript
[02:57]DOTA2亚洲邀请赛小组赛第四日 赛事回顾
2015/02/02 DOTA
python实现将文本转换成语音的方法
2015/05/28 Python
Python的shutil模块中文件的复制操作函数详解
2016/07/05 Python
浅析Python数据处理
2018/05/02 Python
python框架中flask知识点总结
2018/08/17 Python
深入理解Python中的 __new__ 和 __init__及区别介绍
2018/09/17 Python
python使用threading.Condition交替打印两个字符
2019/05/07 Python
用python打印1~20的整数实例讲解
2019/07/01 Python
python GUI库图形界面开发之PyQt5输入对话框QInputDialog详细使用方法与实例
2020/02/27 Python
django 前端页面如何实现显示前N条数据
2020/03/16 Python
Python 为什么推荐蛇形命名法原因浅析
2020/06/18 Python
浅析python字符串前加r、f、u、l 的区别
2021/01/24 Python
CSS3+js实现简单的时钟特效
2015/03/18 HTML / CSS
Canvas 文字碰撞检测并抽稀的方法
2019/05/27 HTML / CSS
后勤工作职责
2013/12/22 职场文书
家长会演讲稿
2014/04/26 职场文书
乡镇群众路线教育实践活动整改措施
2014/10/04 职场文书
幼儿园园长安全责任书
2015/05/08 职场文书
升学宴来宾致辞
2015/07/27 职场文书
交通安全教育主题班会
2015/08/12 职场文书
Mongodb 迁移数据块的流程介绍分析
2022/04/18 MongoDB