1. 定義屬性
Django根據屬性的類型確定以下信息:
- 當前選擇的數據庫支持字段的類型
 - 渲染管理表單時使用的默認html控件
 - 在管理站點最低限度的驗證
 
django會為表創建自動增長的主鍵列,每個模型只能有一個主鍵列,如果使用選項設置某屬性為主鍵列后django不會再創建自動增長的主鍵列。
默認創建的主鍵列屬性為id,可以使用pk代替,pk全拼為primary key。
pk是主鍵的別名,若主鍵名為id2,那么pk是id2的別名。
屬性命名限制:
- 不能是python的保留關鍵字。
 - 不允許使用連續的下划線,這是由django的查詢方式決定的,在第4節會詳細講解查詢。
 - 定義屬性時需要指定字段類型,通過字段類型的參數指定選項。
 
前面已經簡單的使用過了,只是沒有詳細介紹,語法:
屬性=models.字段類型(選項)
1.1 字段類型
(1) AutoField
自動增長的IntegerField,通常不用指定,不指定時Django會自動創建屬性名為id的自動增長屬性。
自定義一個主鍵:
my_id=models.AutoField(primary_key=True)
(2) BooleanField
布爾字段,值為True或False。
(3) NullBooleanField
類似BooleanField,支持Null、True、False三種值。
(4) CharField(max_length=字符長度)
字符串。
參數max_length表示最大字符個數。
(5) TextField
大文本字段,一般超過4000個字符時使用。
(6) IntegerField
整數。
(7) DecimalField(max_digits=None, decimal_places=None)
十進制浮點數。
參數max_digits表示總位數。
參數decimal_places表示小數位數。
(8) FloatField
浮點數。
(9) DateField[auto_now=False, auto_now_add=False])
日期。
參數auto_now表示每次保存對象時,自動設置該字段為當前時間,用於"最后一次修改"的時間戳,它總是使用當前日期,默認為false。
參數auto_now_add表示當對象第一次被創建時自動設置當前時間,用於創建的時間戳,它總是使用當前日期,默認為false。
參數auto_now_add和auto_now是相互排斥的,組合將會發生錯誤。
(10) TimeField
時間,參數同DateField。
(11) DateTimeField
日期時間,參數同DateField。
(12) FileField
上傳文件字段。
參數:upload_to,一個用於保存上傳文件的本地文件系統路徑。
(13) ImageField
繼承於FileField,對上傳的內容進行校驗,確保是有效的圖片。
有兩個可選參數:height_field和width_field。將圖片按照提供的高度和寬度規格保存。
(14) CommaSeparatedIntegerField(max_length)
逗號分隔開的整數字段。
參數與CharField一樣。
(15) FilePathField(path,[match],[recursive])
擁有多個可選項的字段,選項被限定為文件系統中某個目錄下的文件名。
(16) EmailField
能檢查值是否是有效的電子郵件地址的CharField。
(17) IPAddressField
IP地址,以字符串格式表示。
例如:"192.168.0.1"
(18) PhoneNumberField
檢查值是否是一個合法的美式電話格式。
(19) PositiveIntegerField
和IntegerField類似,但是必須是正值。
(20) SlugField
內容簡短的標簽,這段內容只能包含字母、數字、下划線或連字符。通常用於URL中。
(21) SmallIntegerField
和IntegerField類似,但是只允許在一個數據庫相關的范圍內的數值(通常是-32,768到+32,767)
(22) URLField
用來存儲URL的字段。
(23) USStateField
美國州名字縮寫,兩個字母。
(24) XMLField(schema_path)
類似TextField,只不過要檢查值是否匹配指定schema的合法XML。
1.2 選項
通過選項實現對字段的約束。
null:如果為True,表示允許為空,默認值是False。
blank:如果為True,則該字段允許為空白,默認值是False。
要注意,這與 null 不同。null純粹是數據庫范疇的,而blank是數據驗證范疇的。
如果一個字段的blank=True,表單的驗證將允許該字段是空值。如果字段的blank=False,該字段就是必填的。
db_column:字段的名稱,如果未指定,則使用屬性的名稱。
db_index:若值為True, 則在表中會為此字段創建索引,默認值是False。
default:默認值。
primary_key:若為True,則該字段會成為模型的主鍵字段,默認值是False,一般作為AutoField的選項使用。
unique:如果為True, 這個字段在表中必須有唯一值,默認值是False。
choices:一個包含雙元素元組的可迭代的對象,用於給字段提供選項。
editable:如果為False,這個字段在管理界面或表單里將不能編輯。默認為True。
help_text:在管理界面表單對象里顯示在字段下面的額外幫助文本。
radio_admin:默認的,對於ForeignKey或者擁有choices設置的字段,Django管理界面會使用列表選擇框(<select>)。如果radio_admin設置為True的話,Django就會使用單選按鈕界面。
unique_for_date:把它的值設成一個DateField或者DateTimeField的字段的名稱,可以確保字段在這個日期內不會出現重復值。
unique_for_month:和unique_for_date類似,只是要求字段在指定字段的月份內唯一。
unique_for_year:和unique_for_date以及unique_for_month類似,只是時間范圍變成了一年。
verbose_name:除ForeignKey、ManaToManyField和OneToOneField之外的字段都接受一個詳細名稱作為第一個位置參數。
1.3 簡單演示
#圖書類 class BookInfo(models.Model): '''圖書模型類''' # 圖書名稱 btitle = models.CharField(max_length=20, db_column='title') # 圖書名字唯一 # btitle = models.CharField(max_length=20, unique=True, db_index=True) # 價格,最大位數為10,小數為2 # bprice = models.DecimalField(max_digits=10, decimal_places=2) # 出版日期 bpub_date = models.DateField() # bpub_date = models.DateField(auto_now_add=True) # 創建時間 # bpub_date = models.DateField(auto_now=True) # 更新時間 # 閱讀量 bread = models.IntegerField(default=0) # 評論量 bcomment = models.IntegerField(default=0) # 刪除標記 isDelete = models.BooleanField(default=False) class RoleInfo(models.Model): '''角色人物模型類''' # 角色名 rname = models.CharField(max_length=20) # 性別 rgender = models.BooleanField(default=False) # 描述信息 rcomment = models.CharField(max_length=200, null=True, blank=False) # 關系屬性 rbook = models.ForeignKey('BookInfo',on_delete=models.CASCADE) # 刪除標記 isDelete = models.BooleanField(default=False)
