基于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 28 Python
python使用socket远程连接错误处理方法
Apr 29 Python
python中的字典使用分享
Jul 31 Python
python 链接和操作 memcache方法
Mar 04 Python
Python实现的本地文件搜索功能示例【测试可用】
May 30 Python
替换python字典中的key值方法
Jul 06 Python
CentOS7下python3.7.0安装教程
Jul 30 Python
Jupyter notebook在mac:linux上的配置和远程访问的方法
Jan 14 Python
python变量命名的7条建议
Jul 04 Python
关于python字符串方法分类详解
Aug 20 Python
详解Python中的文件操作
Jan 14 Python
Python实现抖音热搜定时爬取功能
Mar 16 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
ThinkPHP入口文件设置及相关注意事项分析
2014/12/05 PHP
fsockopen pfsockopen函数被禁用,SMTP发送邮件不正常的解决方法
2015/09/20 PHP
centos 7.2下搭建LNMP环境教程
2016/11/20 PHP
php 7新特性之类型申明详解
2017/06/06 PHP
laravel 实现设置时区的简单方法
2019/10/10 PHP
laravel 数据验证规则详解
2019/10/23 PHP
PHP文件操作简单介绍及函数汇总
2020/12/11 PHP
JS 树形递归实例代码
2010/05/18 Javascript
jquery.blockUI.js上传滚动等待效果实现思路及代码
2013/03/18 Javascript
js中的preventDefault与stopPropagation详解
2014/01/29 Javascript
jQuery设置和移除文本框默认值的方法
2015/03/09 Javascript
JS实现的页面自定义滚动条效果
2015/10/26 Javascript
ECHO.js 纯javascript轻量级延迟加载的实例代码
2016/05/24 Javascript
浅谈JavaScript 数据属性和访问器属性
2016/09/01 Javascript
jQuery实现联动下拉列表查询框
2017/01/04 Javascript
jQuery插件FusionCharts绘制的3D饼状图效果实例【附demo源码下载】
2017/03/03 Javascript
详解Vue中状态管理Vuex
2017/05/11 Javascript
微信小程序图片自适应支持多图实例详解
2017/06/21 Javascript
JS返回页面时自动回滚到历史浏览位置
2018/09/26 Javascript
vue2.0 实现富文本编辑器功能
2019/05/26 Javascript
vue实现文件上传读取及下载功能
2020/11/17 Javascript
python的即时标记项目练习笔记
2014/09/18 Python
python+opencv实现的简单人脸识别代码示例
2017/11/14 Python
Python使用pymongo模块操作MongoDB的方法示例
2018/07/20 Python
在IPython中进行Python程序执行时间的测量方法
2018/11/01 Python
Python的条件表达式和lambda表达式实例
2019/01/31 Python
python2.7 安装pip的方法步骤(管用)
2019/05/05 Python
详解Python3迁移接口变化采坑记
2019/10/11 Python
Python3如何在服务器打印资产信息
2020/08/27 Python
阿迪达斯加拿大官网:Adidas加拿大
2016/08/25 全球购物
动物科学专业毕业生的自我评价
2013/11/29 职场文书
2014小学教师个人工作总结
2014/11/10 职场文书
邀请函范文
2015/02/02 职场文书
2015庆祝七一建党节94周年活动总结
2015/03/20 职场文书
Python卷积神经网络图片分类框架详解分析
2021/11/07 Python
Nginx静态压缩和代码压缩提高访问速度详解
2022/05/30 Servers