我們知道django的orm想實現自增,可以直接使用autofield欄位既可以實現,但是這種情況必須要求此字段是主鍵,但是我們知道主鍵只能是乙個。
如果我已經有了乙個主鍵,但是又需要另外乙個欄位為唯一自增字段,這該程式設計客棧如何實現呢?
本人的解決辦法如下,供大家參考,也歡迎大家提供更多的實現方式,互相學習。
class productspu(models.model):
"""商品表
"""_database = 'payment'
id = models.uu default=uu 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 ozlxdjov(`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)
*** = models.charfield(max_length=4)
像這種情況。django會自動新增乙個自增id
在資料庫的表結構為
id name ***
相當於class student(models.model):
id = models.autofield(primary_key=true)
name = models.charfield(max_length=16)
*** = 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)
*** = models.charfield(max_length=4)
把autofield 修改為integerfield 即可
這樣建立的資料。資料庫的id值。就不是自增的。可用在插入sql的時候指定 u_id 的值為3,6,8等。
但是不能重複、
本文標題: 基於django 的orm中非主鍵自增的實現方式
本文位址:
Django 中ORM 的使用
1 手動新建乙個資料庫 2 告訴django連線哪個資料庫 settings.py裡配置資料庫連線資訊 資料庫相關的配置項 databases 3 告訴django用pymsql 模組代替預設的mysqldb 去連線mysql 在和settings.py 同目錄下的 init py檔案中做配置 im...
使用Django的ORM詳細步驟
使用django的orm詳細步驟 1.自己動手建立資料庫 在cmd中輸入 create database 資料庫名 2.在django專案中設定連線資料庫的相關配置 告訴django連線哪乙個資料庫 資料庫相關的配置 3.告訴django用pymysql代替預設的mysqldb 連線mysql資料庫...
簡單示例實現django的orm
在django中如果我們定義了乙個user的model。就可以使用user.objects.create 等方法.那麼在django的原始碼中是如何實現這種寫法的呢?下面 從最外層簡單完成了django orm的呼叫方法實現.ps 下面的 只是實現了django的最外面呼叫實現而已.class ma...