Django中模型(二) 三、定義模型 1、模型、屬性、表、欄位間的關係: 一個模型類在資料庫中對應一張表;在模型類中定義的屬性,對應該模型對照表中的欄位。 2、定義屬性 A、概述 ·django根據屬性的類型確定以下信息 ·當前選擇的資料庫支持欄位的類型 ·渲染管理表單時使用的預設html控制項 · ...
Django中模型(二)
三、定義模型
1、模型、屬性、表、欄位間的關係:
一個模型類在資料庫中對應一張表;在模型類中定義的屬性,對應該模型對照表中的欄位。
2、定義屬性
A、概述
·django根據屬性的類型確定以下信息
·當前選擇的資料庫支持欄位的類型
·渲染管理表單時使用的預設html控制項
·在管理站點最低限度的驗證
B、
·django會為表增加自動增長的主鍵列,每個模型只能有一個主鍵列,如果使用選項設置某屬性為主鍵列後,則django不會再生成預設的主鍵列
C、屬性命名限制
·遵循標識符規則
·由於django的查詢方式,不允許使用連續的下劃線
3、庫
定義屬性時,需要欄位類型,欄位類型被定義在django.db.models.fields目錄下,為了方便使用,被導入到django.db.models中
·使用方式:
·導入from django.db import models
·通過models.Field創建欄位類型的對象,賦值給屬性
4、邏輯刪除
·對於重要數據都做邏輯刪除,不做物理刪除,實現方法是定義isDelete屬性,類型為BooleanField,預設值為False
5、欄位類型
·AutoField
·一個根據實際ID自動增長的IntegerField,通常不指定如果不指定,一個主鍵欄位將自動添加到模型中
·CharField(max_length=字元長度)
·字元串,預設的表單樣式是 TextInput
·TextField
·大文本欄位,一般超過4000使用,預設的表單控制項是Textarea
·IntegerField
·整數
·DecimalField(max_digits=None, decimal_places=None)
·使用python的Decimal實例表示的十進位浮點數
·參數說明
·DecimalField.max_digits
·位數總數
·DecimalField.decimal_places
·小數點後的數字位數
·FloatField
·用Python的float實例來表示的浮點數
·BooleanField
·true/false 欄位,此欄位的預設表單控制是CheckboxInput
·NullBooleanField
·支持null、true、false三種值
·DateField([auto_now=False, auto_now_add=False])
·使用Python的datetime.date實例表示的日期
·參數說明
·DateField.auto_now
·每次保存對象時,自動設置該欄位為當前時間,用於"最後一次修改"的時間戳,它總是使用當前日期,預設為false
·DateField.auto_now_add
·當對象第一次被創建時自動設置當前時間,用於創建的時間戳,它總是使用當前日期,預設為false
·說明
·該欄位預設對應的表單控制項是一個TextInput. 在管理員站點添加了一個JavaScript寫的日曆控制項,和一個“Today"的快捷按鈕,包含了一個額外的invalid_date錯誤消息鍵
·註意
·auto_now_add, auto_now, and default 這些設置是相互排斥的,他們之間的任何組合將會發生錯誤的結果
·TimeField
·使用Python的datetime.time實例表示的時間,參數同DateField
·DateTimeField
·使用Python的datetime.datetime實例表示的日期和時間,參數同DateField
·FileField
·一個上傳文件的欄位
·ImageField
·繼承了FileField的所有屬性和方法,但對上傳的對象進行校驗,確保它是個有效的image
6、欄位選項
·概述
·通過欄位選項,可以實現對欄位的約束
·在欄位對象時通過關鍵字參數指定
·null
·如果為True,Django 將空值以NULL 存儲到資料庫中,預設值是 False
·blanke
·如果為True,則該欄位允許為空白,預設值是 False
·註意
·null是資料庫範疇的概念,blank是表單驗證證範疇的
·db_column
·欄位的名稱,如果未指定,則使用屬性的名稱
·db_index
·若值為 True, 則在表中會為此欄位創建索引
·default
·預設值
·primary_key
·若為 True, 則該欄位會成為模型的主鍵欄位
·unique
·如果為 True, 這個欄位在表中必須有唯一值
7、關係
·分類
·ForeignKey:一對多,將欄位定義在多的端中
·ManyToManyField:多對多,將欄位定義在兩端中
·OneToOneField:一對一,將欄位定義在任意一端中
·用一訪問多
·格式
·對象.模型類小寫_set
·示例
grade.students_set
·用一訪問一
·格式
·對象.模型類小寫
·示例
·grade.students
·訪問id
·格式
·對象.屬性_id
·示例
·student.sgrade_id
7、元選項
概念:
在模型類中定義Mate類,用於設置元信息
db_table:
定義表名,推薦使用小寫字母,預設為項目名(小寫)_類名(小寫)
ordering:
對象的預設排序欄位,獲取對象的列表時使用。
ordering[‘id’] :以id升序排列
ordering[‘-id’] :以id降序排列
使用排序會增大資料庫的開銷