基于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 str与repr的区别
Mar 23 Python
Python爬虫实现的根据分类爬取豆瓣电影信息功能示例
Sep 15 Python
深入浅析Python 中的sklearn模型选择
Oct 12 Python
Django框架模板用法入门教程
Nov 04 Python
python入门之井字棋小游戏
Mar 05 Python
python 获取当前目录下的文件目录和文件名实例代码详解
Mar 10 Python
什么是Python变量作用域
Jun 03 Python
Python如何对齐字符串
Jul 30 Python
python3 中使用urllib问题以及urllib详解
Aug 03 Python
Python爬虫简单运用爬取代理IP的实现
Dec 01 Python
pytorch 把图片数据转化成tensor的操作
Mar 04 Python
Python 中面向接口编程
May 20 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
10条php编程小技巧
2015/07/07 PHP
php cookie 详解使用实例
2016/11/03 PHP
php实现异步将远程链接上内容(图片或内容)写到本地的方法
2016/11/30 PHP
thinkphp Apache配置重启Apache1 restart 出错解决办法
2017/02/15 PHP
datePicker——日期选择控件(with jquery)
2007/02/20 Javascript
两种WEB下的模态对话框 (asp.net或js的分别实现)
2009/12/02 Javascript
来自国外的14个图片放大编辑的jQuery插件整理
2010/10/20 Javascript
读jQuery之十四 (触发事件核心方法)
2011/08/23 Javascript
jQuery之Deferred对象详解
2014/09/04 Javascript
浅析Javascript匿名函数与自执行函数
2016/02/06 Javascript
几句话带你理解JS中的this、闭包、原型链
2016/09/26 Javascript
AngularJS表单基本操作
2017/01/09 Javascript
bootstrap css样式之表单
2017/01/19 Javascript
Vue2.0实现购物车功能
2017/06/05 Javascript
如何在vue中使用ts的示例代码
2018/02/28 Javascript
vue elementUI使用tabs与导航栏联动
2019/06/21 Javascript
微信小程序之左右布局的实现代码
2019/12/13 Javascript
vue实现扫码功能
2020/01/17 Javascript
原生js实现日历效果
2020/03/02 Javascript
如何构建 vue-ssr 项目的方法步骤
2020/08/04 Javascript
javascript实现雪花飘落效果
2020/08/19 Javascript
一个小示例告诉你Python语言的优雅之处
2014/07/04 Python
详解Python中的type()方法的使用
2015/05/21 Python
Ubuntu下使用python读取doc和docx文档的内容方法
2018/05/08 Python
解决Python print 输出文本显示 gbk 编码错误问题
2018/07/13 Python
python通过http下载文件的方法详解
2019/07/26 Python
谈一谈HTML5本地存储技术
2016/03/02 HTML / CSS
HTML5 3D旋转相册的实现示例
2019/12/03 HTML / CSS
您熟悉ORM(Object-Relation Mapping)吗?请谈谈您所理解的ORM
2016/02/08 面试题
妇产科护士自我鉴定
2013/10/15 职场文书
跟单业务员岗位职责
2014/03/08 职场文书
简单租房协议书范本
2014/08/20 职场文书
2015年团支部年度工作总结
2015/05/27 职场文书
java设计模式--三种工厂模式详解
2021/07/21 Java/Android
MongoDB数据库部署环境准备及使用介绍
2022/03/21 MongoDB
Win10开机修复磁盘错误怎么跳过?Win10关闭开机磁盘检查的方法
2022/09/23 数码科技