Django中模型(二)
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降序排列
使用排序會增大數據庫的開銷
Django中模型(二)