Django框架 模型層 字段屬性和選項

2021-10-06 17:32:46 字數 1816 閱讀 5270

django根據屬性的型別確定以下資訊:

django會為表建立自動增長的主鍵列,每個模型只能有乙個主鍵列,如果使用選項設定某屬性為主鍵列後django不會再建立自動增長的主鍵列。

預設建立的主鍵列屬性為id,可以使用pk代替,pk全拼為primary key。

注意:pk是主鍵的別名,若主鍵名為id2,那麼pk是id2的別名。

模型類屬性命名限制:

1)不能是python的保留關鍵字。

2)不允許使用連續的下劃線,這是由django的查詢方式決定的。

3)定義屬性時需要指定字段型別,通過字段型別的引數指定選項,語法如下:

屬性名=models.欄位型別(選項)

使用時需要引入django.db.models包,字段型別如下:

型別描述

autofield

自動增長的integerfield,通常不用指定,不指定時django會自動建立屬性名為id的自動增長屬性。

booleanfield

布林字段,值為true或false。

nullbooleanfield

支援null、true、false三種值。

charfield(max_length=最大長度)

字串。引數max_length表示最大字元個數。

textfield

大文字字段,一般超過4000個字元時使用。

integerfield

整數decimalfield(max_digits=none, decimal_places=none)

十進位制浮點數。引數max_digits表示總位。引數decimal_places表示小數字數。

floatfield

浮點數。引數同上

datefield:([auto_now=false, auto_now_add=false])

日期。1)引數auto_now表示每次儲存物件時,自動設定該字段為當前時間,用於"最後一次修改"的時間戳,它總是使用當前日期,預設為false。

2) 引數auto_now_add表示當物件第一次被建立時自動設定當前時間,用於建立的時間戳,它總是使用當前日期,預設為false。

3)引數auto_now_add和auto_now是相互排斥的,組合將會發生錯誤。

timefield

時間,引數同datefield。

datetimefield

日期時間,引數同datefield。

filefield

上傳檔案字段。

imagefield

繼承於filefield,對上傳的內容進行校驗,確保是有效的。

通過選項實現對字段的約束,選項如下:

選項名描述

default

預設值。設定預設值。

primary_key

若為true,則該字段會成為模型的主鍵字段,預設值是false,一般作為autofield的選項使用。

unique

如果為true, 這個欄位在表中必須有唯一值,預設值是false。

db_index

若值為true, 則在表中會為此字段建立索引,預設值是false。

db_column

欄位的名稱,如果未指定,則使用屬性的名稱。

null

如果為true,表示允許為空,預設值是false。

blank

如果為true,則該字段允許為空白,預設值是false。

對比:null是資料庫範疇的概念,blank是表單驗證證範疇的。

當修改模型類之後,如果新增的選項不影響表的結構,則不需要重新做遷移,商品的選項中default和blank不影響表結構。

更多:

鹹魚筆記 Django模型(字段屬性)

學習版本 django 1.8.python 3.5 模型 欄位屬性 模型類屬性命名限制 不能是python的保留關鍵字 不允許使用連續的下劃線 定義屬性時需要指定字段型別,通過字段型別的引數指定選項,語法如下 屬性名 models.欄位型別 選項 字段型別 使用時 需要倒入包django.db.m...

Django 模型層字段的choice引數

choice屬性用來限制使用者選擇的範圍,例如 性別的選擇 男,女 models.py from django.db import models class course models.model 課程表 level models.charfield max length 10,choice 1 初...

Django 資料模型欄位及屬性

autofield 乙個能夠根據可用id自增的 integerfield booleanfield 乙個真 假 true false 字段 charfield max length 乙個字串字段,適用於中小長度的字串。對於長段的文字,請使用 textfield commaseparatedinteg...