基于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自动翻译实现方法
May 28 Python
python下读取公私钥做加解密实例详解
Mar 29 Python
详解python里使用正则表达式的全匹配功能
Oct 19 Python
matplotlib subplots 设置总图的标题方法
May 25 Python
python学习——内置函数、数据结构、标准库的技巧(推荐)
Apr 18 Python
Python super()方法原理详解
Mar 31 Python
OpenCV 表盘指针自动读数的示例代码
Apr 10 Python
django和flask哪个值得研究学习
Jul 31 Python
基于python获取本地时间并转换时间戳和日期格式
Oct 27 Python
Python自动化办公Excel模块openpyxl原理及用法解析
Nov 05 Python
利用python为PostgreSQL的表自动添加分区
Jan 18 Python
Python面向对象编程之类的概念
Nov 01 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
mysql From_unixtime及UNIX_TIMESTAMP及DATE_FORMAT日期函数
2010/03/21 PHP
PHP 杂谈《重构-改善既有代码的设计》之四 简化条件表达式
2012/04/09 PHP
解析如何屏蔽php中的phpinfo()函数
2013/06/06 PHP
ThinkPHP3.1数据CURD操作快速入门
2014/06/19 PHP
php图片处理函数获取类型及扩展名实例
2014/11/19 PHP
CI框架中site_url()和base_url()的区别
2015/01/07 PHP
PHP SPL标准库中的常用函数介绍
2015/05/11 PHP
PHP记录和读取JSON格式日志文件
2016/07/07 PHP
PHP简单预防sql注入的方法
2016/09/27 PHP
Laravel框架实现利用中间件进行操作日志记录功能
2018/06/06 PHP
javaScript 简单验证代码(用户名,密码,邮箱)
2009/09/28 Javascript
js客户端快捷键管理类的较完整实现和应用
2010/06/08 Javascript
JavaScript中的null和undefined解析
2012/04/14 Javascript
WebApi+Bootstrap+KnockoutJs打造单页面程序
2016/05/16 Javascript
AngularJS路由实现页面跳转实例
2017/03/03 Javascript
一个基于react的图片裁剪组件示例
2018/04/18 Javascript
基于Vue的延迟加载插件vue-view-lazy
2018/05/21 Javascript
Vue-cli@3.0 插件系统简析
2018/09/05 Javascript
Layui表格行工具事件与数据回填方法
2019/09/13 Javascript
Nodejs实现图片上传、压缩预览、定时删除功能
2019/10/25 NodeJs
js实现轮播图特效
2020/05/28 Javascript
[01:45]2014DOTA2 TI预选赛预选赛 战前探营!
2014/05/21 DOTA
Windows系统下安装Python的SSH模块教程
2015/02/05 Python
Python中return self的用法详解
2018/07/27 Python
django框架面向对象ORM模型继承用法实例分析
2019/07/29 Python
python实现AdaBoost算法的示例
2020/10/03 Python
英国著名的化妆品折扣网站:Allbeauty.com
2016/07/21 全球购物
如何向接受结构参数的函数传入常数值
2016/02/17 面试题
中学教师实习自我鉴定
2013/09/28 职场文书
集体婚礼证婚词
2014/01/13 职场文书
大学生期末自我鉴定
2014/02/01 职场文书
公司门卫管理制度
2014/02/01 职场文书
反邪教宣传工作方案
2014/05/07 职场文书
捐助贫困学生倡议书
2014/05/16 职场文书
2015出纳试用期工作总结
2014/12/12 职场文书
一文搞懂Redis中String数据类型
2022/04/03 Redis