
定義屬性
概述
? ? ? Django根據(jù)屬性的類型確定以下信息
? ? ? ? 1.當(dāng)前選擇的數(shù)據(jù)庫支持字段的類型
? ? ? ? 2.渲染管理表單時使用的默認(rèn)html控件
? ? ? ? 3.在管理站點最低限度的驗證
? ? ? django會為表增加自動增長的主鍵,每個模型只能有一個主鍵列,如果使用選項設(shè)置某屬性為主鍵列后,則Django不會再生成默認(rèn)的主鍵
? ? 屬性命名限制
? ? ? ? 1.不能是python的保留關(guān)鍵字
? ? ? ? 2.由于Django的查詢方式,不允許使用連續(xù)的下劃線
庫
? ? 定義屬性時,需要字段類型,字段類型被定義在django.db.models.fileds目錄下,為了方便使用,被導(dǎo)入到django.db.models中
? 使用方式
? ? ? 1.導(dǎo)入from django.db import models
? ? ? 2.通過models.Filed創(chuàng)建字段類型的對象,賦值給屬性
邏輯刪除
? ? 對于重要數(shù)據(jù)都做邏輯刪除,不做物理刪除,實現(xiàn)方法是定義isDelete屬性,類型為BooleanField,默認(rèn)值為False
字段類型
? ? 1.AutoField
? ? ? ? ? a.一個根據(jù)實際ID自動增長的IntegerField,通常不指定如果不指定
? ? ? ? ? b.一個主鍵字段將自動加到模型中
? ? 2.CharField(max_length=字符長度)
? ? ? ? ? ? 字符串,默認(rèn)的表單樣式是 TextInput
? ? 3.TextField
? ? ? ? ? ? ? 大文本字段,一般超過4000使用,默認(rèn)的表單控件是Textarea
? ? 4.IntegerField
? ? ? ? ? ? ? 整數(shù)
? ? 5.DecimalField(max_digits=None,decimal_places=None)
? ? ? ? ? a.使用python的Decimal實例表示的十進制浮點數(shù)
? ? ? ? ? b.參數(shù)說明
? ? ? ? ? ? ? DecimalField.max_digits? 位數(shù)總和
? ? ? ? ? ? ? DecimalField.decimal_places 小數(shù)點后的數(shù)字位數(shù)
? ? 6.FloatField
? ? ? ? ? 用python的float實例來表示的浮點數(shù)
? ? 7.BooleanField
? ? ? true/false 字段,此字段的默認(rèn)表單控制是checkboxInput
? ? 8.NullBooleanField
? ? ? 支持null,true,False三種值
? ? 9.DateField([auto_now=False,auto_now_add=False])
? ? ? a.使用python的datetime.date實際表示的日前
? ? ? b.參數(shù)說明
? ? ? ? ? b1.DateField.auto_now
? ? ? ? ? ? 每次保存對象時,自動設(shè)置該字段為當(dāng)前時間,用于“最后一次修改”
? ? ? ? ? ? 的時間戳,它總是使用當(dāng)前日前,默認(rèn)為false
? ? ? ? ? b2.DateField.auto_now_add
? ? ? ? ? ? 當(dāng)對象第一次被創(chuàng)建時自動設(shè)置當(dāng)前時間,用于創(chuàng)建的時間戳,它總是使用當(dāng)前日前,默認(rèn)為false
? ? ? c.說明
? ? ? 該字段默認(rèn)對應(yīng)的表單控件是一個TextInput,在管理員站點
? ? ? 添加了一個javaScript寫的日歷控件,和一個Today的快捷按
? ? ? 鈕,包含了一個額外的invalid_date錯誤消息鍵
? ? ? d.注意
? ? ? ? auto_now_add,auto_now,and default 這些設(shè)置是相互排斥的,,不可相互組合
? ? 10.TimeField
? ? ? ? 使用Python的datetime
? ? ? ? datetime實例表示的日期和時間,參數(shù)同DateField
? ? 11.FileField
? ? ? ? 一個上傳文件的字段
? ? 12.ImageFiled
? ? ? 繼承了FileFiled的所有屬性和方法,但對上傳的對象進行校驗,確保它是個有效的image
? 字段選項
? ? 概述
? ? ? ? 通過字段選項,可以實現(xiàn)對字段的約束
? ? ? ? 在字段對象時通過關(guān)鍵字參數(shù)指定
? ? null 如果為True,Django將空值以NULL 存儲到數(shù)據(jù)庫中,默認(rèn)是False
? ? blanke? 如果為True,則該字段允許為空白,默認(rèn)值是False
? ? 注意
? ? ? ? null是數(shù)據(jù)庫范疇的概念,blank是表單驗證范疇的
? ? db_column 字段的名稱,如果未指定,則使用屬性的名稱
? ? db_index? 若值為True,則在表中會為此字段創(chuàng)建索引
? ? default 默認(rèn)值
? ? primary_key 若為True,則該字段會成為模型的主鍵字段
? ? unique? 若為True,則該字段在表中必須有唯一值
關(guān)系?
? 分類
? ? ? ForeignKey:一對多,將字段定義在多個端中
? ? ? ManyToManyField:多對多,將字段定義在兩端中
? ? ? OneToOneField:一對一,將字段定義在任意一端中
? 用一訪問多
? ? 格式
? ? ? ? 對象.模型類小寫_set
? ? eg:grade.student_set
? 用一訪問一
? ? 格式
? ? ? ? 對象.模型類小寫
? ? ? eg:grade.students
? 訪問id
? ? 格式
? ? ? ? 對象.屬性_id
? ? eg:student.sgrade_id
