Django-Models

  • Django 對(duì)各種數(shù)據(jù)庫提供了很好的支持昂儒,Django為這些數(shù)據(jù)庫提供了統(tǒng)一的調(diào)用API屯碴,可以根據(jù)不同的業(yè)務(wù)需求選擇不同的數(shù)據(jù)庫。

如需了解更多,請(qǐng)?jiān)L問: https://www.emperinter.info/2022/05/29/django-models/

ORM

  • 概述
    • 對(duì)象-映射-模型
  • 任務(wù)
    • 根據(jù)對(duì)象的類型生成表結(jié)構(gòu)
    • 將對(duì)象泼疑、列表的操作轉(zhuǎn)換為sql語句
    • 將SQL語句查詢的結(jié)果轉(zhuǎn)換為對(duì)象、列表
  • 優(yōu)點(diǎn)
    • 極大的減輕了開發(fā)人員的工作量荷荤,不需要面對(duì)因數(shù)據(jù)庫的變更而修改代碼

流程

配置數(shù)據(jù)庫

  • __init__.py文件中添加選定的數(shù)據(jù)庫Package退渗。
import pymysql  
pymysql.version_info = (2,0,3,"final",0)  
pymysql.install_as_MySQLdb()
  • settings.py文件中修改數(shù)據(jù)庫配置。
DATABASES = {  
    'default': {  
        'ENGINE': 'django.db.backends.mysql',  
        'NAME': 'sunck', # 數(shù)據(jù)庫名  
        'USER': 'sunk', # 數(shù)據(jù)庫用戶名  
        'PASSWORD': 'sunk', # 數(shù)據(jù)庫密碼  
        'HOST': 'localhost', # 數(shù)據(jù)庫主機(jī)  
        'PORT': '3306', # 數(shù)據(jù)庫端口  
    }  
}

在models.py 添加模型類

  • 一個(gè)模型類都在數(shù)據(jù)庫中對(duì)應(yīng)一張表

定義模型

模型蕴纳、屬性会油、表、字段間的關(guān)系

  • 一個(gè)模型類在數(shù)據(jù)庫中對(duì)應(yīng)一張表
  • 模型類中定義的屬性古毛,對(duì)應(yīng)模型對(duì)照表中的字段

定義屬性

概述

  • Django根據(jù)屬性的類型確定以下信息
    • 當(dāng)前選擇的數(shù)據(jù)庫支持字段的類型
    • 渲染管理表單時(shí)使用的默認(rèn)html控件
    • 在管理站點(diǎn)最低限度的驗(yàn)證
  • Django會(huì)為表增加自動(dòng)增加的主鍵列翻翩,每個(gè)模型只能有一個(gè)主鍵列,如果使用選項(xiàng)設(shè)置某屬性為主鍵列后稻薇,則Django不會(huì)再生成默認(rèn)的主鍵列嫂冻。
  • 屬性命名限制
    • 不能是Python的保留關(guān)鍵字(遵循標(biāo)識(shí)符命名規(guī)則)
    • 由于Django的查詢方式,不允許使用連續(xù)的下劃線

  • 定義屬性時(shí)塞椎,需要字段類型桨仿,字段類型被定義再django.db.modles.fields目錄下,為了方便使用案狠,被導(dǎo)入到django.db.modles
  • 使用方式:
    • 導(dǎo)入from django.db import models
    • 通過modles.Field創(chuàng)建字段類型的對(duì)象服傍,賦值給屬性

邏輯刪除

  • 對(duì)于重要數(shù)據(jù)都做邏輯刪除 ,不能做物理刪除,實(shí)現(xiàn)方法是定義isDelete屬性骂铁,類型為BooleanField,默認(rèn)值為False吹零。

字段類型

字段類型 說明
AutoField 一個(gè)根據(jù)實(shí)際ID自動(dòng)增長(zhǎng)的IntergerField,通常不指定从铲,如果不指定一個(gè)主鍵字段將自動(dòng)添加到模型中
CharField(max_length=字符長(zhǎng)度) 字符串瘪校,默認(rèn)的表單樣式是TextInput
TextField 大文本字段,一般超過4000字節(jié)使用,默認(rèn)的表單控件是textArea
IntegerField 整數(shù)
DecimalFiled(max_digits=None,decimal_places=None) 使用Python的Decimal實(shí)例表示的十進(jìn)制浮點(diǎn)數(shù)阱扬,max_digits表示位數(shù)總數(shù)泣懊,decimal_places表示小數(shù)點(diǎn)后的數(shù)字位數(shù)。[[精確的浮點(diǎn)運(yùn)算-Decimal]]
FloatField 用Python的Float實(shí)例來表示的浮點(diǎn)數(shù)
BooleanField true/false字段麻惶,此字段的默認(rèn)表單控制是CheckboxInput
NullBolleanField 支持null馍刮、true、false三種值
DateField([auto_now=False,auto_now_add=False]) 使用Python的Datetime.date實(shí)例表示的日期窃蹋,auto_now表示每次保存對(duì)象是卡啰,自動(dòng)設(shè)置該字段為當(dāng)前時(shí)間,用于“最后一次修改”的時(shí)間戳警没,它總是使用當(dāng)前日期匈辱,默認(rèn)為False。auto_now_add表示當(dāng)對(duì)象第一次被創(chuàng)建時(shí)自動(dòng)設(shè)置當(dāng)前時(shí)間杀迹,用于創(chuàng)建的時(shí)間戳亡脸,它總是使用當(dāng)前時(shí)間,默認(rèn)為False树酪。說明:該字段默認(rèn)對(duì)于表單控件是一個(gè)TextField浅碾,在管理員站點(diǎn)添加了一個(gè)JavaScript寫的日歷控件,和一個(gè)“Today”的快捷按鈕续语,包含了一個(gè)額外的invalid_date錯(cuò)誤消息鍵垂谢。注意:auto_now_add、auto_now疮茄、defalut這些設(shè)置是相互排斥的滥朱,他們之間的任何組合將會(huì)發(fā)生錯(cuò)誤的結(jié)果。
TimeField 使用Python的datetime娃豹,datetime實(shí)例表示的日期和時(shí)間焚虱,參數(shù)同DateField
FiledField 一個(gè)上傳文件的字段
ImageField 繼承了FileField的所有屬性和方法,但對(duì)上傳的對(duì)象進(jìn)行校驗(yàn)懂版,確保它是一個(gè)有效的image

字段選項(xiàng)(字段參數(shù))

  • 概述:
    • 通過字段選項(xiàng),可以實(shí)現(xiàn)對(duì)字段的約束
    • 在字段對(duì)象是通過關(guān)鍵字參數(shù)指定
  • null
    • 如果為True躏率,Django將空值已NULL存儲(chǔ)到數(shù)據(jù)庫中躯畴,默認(rèn)是False
  • blanke
    • 如果為True,則該字段允許為空白薇芝,默認(rèn)值是False
    • 注意:
      • null是數(shù)據(jù)庫范疇的概念蓬抄,blank是表單驗(yàn)證范疇的
  • db_column
    • 字段的名稱,如未指定夯到,則使用屬性的名稱
  • db_index
    • 若值為True嚷缭,則在表中會(huì)為此字段創(chuàng)建索引
  • defalut
    • 默認(rèn)值
  • primary_key
    • 若為True,則該字段會(huì)成為模型的主鍵字段
  • unique
    • 若為True,則該字段的值必須唯一

關(guān)系

  • 分類
    • ForeignKey:一對(duì)多阅爽,將字段定義在多的端中
    • ManyToManyField: 多對(duì)多路幸,將字段定義在兩端中
    • OneToOneField:一對(duì)一,將字段定義在任意一端中付翁。
  • 用一訪問多:
    • 格式: 對(duì)象.模型類小寫_set
    • 示例:grade.students_set
  • 用一訪問一:
    • 格式:對(duì)象.模型類小寫
    • 示例:grade.students
  • 訪問id:
    • 格式:對(duì)象.屬性_id
    • 示例:student.sgrade_id

創(chuàng)建模型類

如需了解更多简肴,請(qǐng)?jiān)L問: https://www.emperinter.info/2022/05/29/django-models/

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市百侧,隨后出現(xiàn)的幾起案子砰识,更是在濱河造成了極大的恐慌,老刑警劉巖佣渴,帶你破解...
    沈念sama閱讀 211,639評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件辫狼,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡辛润,警方通過查閱死者的電腦和手機(jī)膨处,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,277評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來频蛔,“玉大人灵迫,你說我怎么就攤上這事』尴” “怎么了瀑粥?”我有些...
    開封第一講書人閱讀 157,221評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)三圆。 經(jīng)常有香客問我狞换,道長(zhǎng),這世上最難降的妖魔是什么舟肉? 我笑而不...
    開封第一講書人閱讀 56,474評(píng)論 1 283
  • 正文 為了忘掉前任修噪,我火速辦了婚禮,結(jié)果婚禮上路媚,老公的妹妹穿的比我還像新娘黄琼。我一直安慰自己,他們只是感情好整慎,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,570評(píng)論 6 386
  • 文/花漫 我一把揭開白布脏款。 她就那樣靜靜地躺著,像睡著了一般裤园。 火紅的嫁衣襯著肌膚如雪撤师。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,816評(píng)論 1 290
  • 那天拧揽,我揣著相機(jī)與錄音剃盾,去河邊找鬼腺占。 笑死,一個(gè)胖子當(dāng)著我的面吹牛痒谴,可吹牛的內(nèi)容都是我干的衰伯。 我是一名探鬼主播,決...
    沈念sama閱讀 38,957評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼闰歪,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼嚎研!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起库倘,我...
    開封第一講書人閱讀 37,718評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤临扮,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后教翩,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體杆勇,經(jīng)...
    沈念sama閱讀 44,176評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,511評(píng)論 2 327
  • 正文 我和宋清朗相戀三年饱亿,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了蚜退。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,646評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡彪笼,死狀恐怖钻注,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情配猫,我是刑警寧澤幅恋,帶...
    沈念sama閱讀 34,322評(píng)論 4 330
  • 正文 年R本政府宣布,位于F島的核電站泵肄,受9級(jí)特大地震影響捆交,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜腐巢,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,934評(píng)論 3 313
  • 文/蒙蒙 一品追、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧冯丙,春花似錦肉瓦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,755評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至蛹疯,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間热监,已是汗流浹背捺弦。 一陣腳步聲響...
    開封第一講書人閱讀 31,987評(píng)論 1 266
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人列吼。 一個(gè)月前我還...
    沈念sama閱讀 46,358評(píng)論 2 360
  • 正文 我出身青樓幽崩,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親寞钥。 傳聞我的和親對(duì)象是個(gè)殘疾皇子慌申,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,514評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容