基于django 的orm中非主键自增的实现方式
我们知道django的orm想实现自增,可以直接使用AutoField字段既可以实现,但是这种情况必须要求此字段是主键,但是我们知道主键只能是一个。
如果我已经有了一个主键,但是又需要另外一个字段为唯一自增字段,这该如何实现呢?
本人的解决办法如下,供大家参考,也欢迎大家提供更多的实现方式,互相学习。
classProductSpu(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语句设置如下:
CREATETABLE`ehr-payment`.`t_product_spu`( `c_id`char(32)NOTNULL, `c_product_no`int(11)NOTNULLAUTO_INCREMENTCOMMENT'商品编码', `c_name`varchar(100)NOTNULLCOMMENT'商品名称', PRIMARYKEY(`c_id`), UNIQUEKEY`c_product_no`(`c_product_no`) )ENGINE=InnoDBAUTO_INCREMENT=100001DEFAULTCHARSET=utf8COMMENT='商品表';
经过如上两点配合设置,新增一条数据是会自动填充自增字段product_no,其中通过sql配置AUTO_INCREMENT=100001,实现自增字段开始的值。如,此例是从100001开始自增。
补充知识:django关于自增id的问题
在django中,如果创建模型。不指定id。django会自动自定一个id
classStudent(models.Model): name=models.CharField(max_length=16) sex=models.CharField(max_length=4)
像这种情况。django会自动添加一个自增id
在数据库的表结构为
idnamesex
相当于
classStudent(models.Model): id=models.AutoField(primary_key=True) name=models.CharField(max_length=16) sex=models.CharField(max_length=4)
然后这id是自增的。
如果需要自定义id,然后这个id值是可用自己定义。那么就需要这样做即可
classStudent(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中非主键自增的实现方式就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。