Django模型詳解

結(jié)構(gòu)圖一

定義屬性

概述

? ? ? 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


定義模型腦圖
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,547評論 19 139
  • Django 準(zhǔn)備 “虛擬環(huán)境為什么需要虛擬環(huán)境:到目前位置,我們所有的第三方包安裝都是直接通過 pip inst...
    33jubi閱讀 1,391評論 0 5
  • Web框架之Django: (1)簡介: Django是一個由Python寫成開源的重量級Web應(yīng)用框架,采用MT...
    老肖閱讀 3,164評論 0 18
  • 前言 根據(jù)前幾篇文章的分享已經(jīng)了解djangoWeb開發(fā)一般步驟為:創(chuàng)建虛擬環(huán)境安裝django創(chuàng)建項目創(chuàng)建應(yīng)用在...
    博行天下閱讀 1,199評論 0 2
  • 一、Django框架前言知識: 1、C/S和B/S的區(qū)別: C/S結(jié)構(gòu)軟件:客戶端/服務(wù)端軟件,即客戶端要自己下載...
    月下獨酌123閱讀 5,119評論 0 36

友情鏈接更多精彩內(nèi)容