「原創」第四章、模型設計

2020-12-22 酷扯兒

本文轉載自【微信公眾號:java進階架構師,ID:java_jiagoushi】經微信公眾號授權轉載,如需轉載與原文作者聯繫

模型設計

回顧

前三章我們可以算是一腳邁進了Django的大門(也稱入坑),因為程式設計師入坑第一步就是學會Hello World。希望你別驕傲,我們接下來才是真正的旅途——一起領略Django真正的迷人之處。

模型本質

現在,我們來學習模型,Django模型層是Django框架自定義的一套獨特的ORM(Object Relational Mapping,關係映射模型)技術。

模型本質上就是資料庫表的布局,再附加一些元數據。模型包含了你要在資料庫中創建的欄位信息及對數據表的一些操作。

基本操作

想要操作模型,我們先來了解Django模型層的大概。使用Django模型開發的首要任務就是定義模型類及其屬性,每個模型的物理存在方式就是一個Python的類Class,每個模型代表資料庫中的一張表,每個類的實例代表數據表中的一行數據,而類中的每個屬性被映射為數據表中的一列欄位。

可能你還是很懵逼,沒關係,我們從偽代碼中再來看看這些概念。

模型類定義模型定義的基本結構如下:

from django.db import modelsclass ModelName(models.Model):field1 = models.XXField(...) fiels2 = models.XXField(...) ... class Meta: db_table = ... other metas = ...

解析如下:

所有Django模型都是django.db.models.Model類的子類。每個類都會被轉換為資料庫表通過其中的類屬性定義模型欄位,模型欄位必須是某種models.XXField類型,比如CharField,DateTimeField等等,而這些就會被轉換為對應資料庫表中的列通過模型類中的Meta子類定義模型元數據,比如資料庫表名、數據默認排序方式等。我們來詳細看一個樣例:定義了一個 Person, 其擁有 first_name 和 last_name:

from django.db import modelsclass Person(models.Model):first_name = models.CharField(max_length=30) last_name = models.CharField(max_length=30)

first_name 和 last_name 是模型的欄位。每個欄位都被指定為一個類屬性,並且每個屬性映射為一個資料庫列。

上面的 Person 模型會創建一個如下的資料庫表:

CREATE TABLE myapp_person ("id" serial NOT NULL PRIMARY KEY, "first_name" varchar(30) NOT NULL, "last_name" varchar(30) NOT NULL);

我們介紹一下class Meta中的那些屬性,Meta類的屬性名由Django預定義,我們無需自己創建,Model 元數據就是 "不是一個欄位的任何數據" -- 比如排序選項,常見的Meta類屬性匯總如下:

abstract: True or False,標識本類是否為抽象基類app_label:定義本類所屬的應用,比如app_labels = 'myapp'db_table:映射的數據表名,比如db_table='db_blogs'default_related_name:定義本模型的反向關係引用名稱,默認與模型名一致。ordering:本模型記錄的默認排序欄位,可以設置多個欄位,默認以升序排列,如果降序需要在欄位前加「負號」。比如,按文章發布時間降序顯示:

class Meta:ordering = ("-publish_date", ) # 按照publish欄位值的倒序顯示

...還有很多其他的選項,我們暫時先不列出,有興趣的可以自行查看Django文檔Model Meta options,先混個眼熟,等項目中具體用到我們再添加。上訴只是簡單列出一些能用到的 Meta 選項。我們需要注意的使:沒有一個選項是必需的,是否添加 class Meta 到你的 model 完全是可選的。

普通欄位類型普通欄位類型是指模型類中除外鍵關係外的數據欄位類型。數據欄位為Django使用模型時提供如下信息。

在資料庫中用什麼類型定義模型欄位,比如INTEGER、VARCHAR等。用什麼樣的HTML標籤顯示模型欄位,比如<input type="radio">等。需要什麼樣的HTML表單數據驗證。所有的數據欄位的屬性必須繼承自抽象類django.db.models.Field,我們可以使用Django預定義的一系列Field子類,也可以自己定義繼承該類的欄位類型。

AutoField:一個自動遞增的整型欄位,添加記錄時它會自動增長。AutoField欄位通常用於數據表的主鍵;如果模型中沒有指定主鍵欄位,則Django會自動添加一個AutoField欄位。BigIntegerField:64位整型欄位CharField:字符串欄位,用於較短的字符串,相對應的HTML標籤是單行輸入框<input type="text">TextField:大容量文本欄位,相對應的HTML標籤是多行編輯框<textarea>更多欄位類型,參見官方Model field reference常用的欄位參數每個欄位類型都有一些特定的HTML標籤和表單驗證參數,比如height_field、path等。

primary_key參數:設置一個模型的主鍵欄位,為True或False

from django.db import modelsclass Person(models.Model):id = models.AutoField(primary_key=True)

null:定義是否允許相對應的資料庫欄位為Null,默認設置為Falseblank:如果為True,則該欄位允許為空白。默認值為False請注意,這個欄位與null有所不同。null與資料庫完全相關,是資料庫的飛空約束;而blank與表單驗證相關。如果欄位包含blank=True,則表單驗證將允許輸入一個空值。

choices:定義欄位的可選值,本欄位的值應該是一個包含二維元素的元組,第一個元素是實際存儲的值,第二個元素是HTML頁面中顯示給我們看的名稱,我們之後的項目會用到這一欄位。例如:

from django.db import modelsLEVLES = (('1', 'Very Good'), ('2', 'Good'), ('3', 'Normal'), ('4', 'Bad'),)class Comment(models.Model): id = models.AutoField(primary_key=True) levels = models.CharField(max_length=1, choices=LEVELS)

help_text:HTML頁面中輸入控制項的幫助字符串unique:如果為True,代碼此欄位在整個表中是唯一的。...總結

到此,我們花了大量的時間來介紹Django的模型的基本結構、欄位類型、欄位參數,其實Django遠遠不止這些欄位。現在很多我們用不上,沒關係,等需要用到的時候查看官方文檔使用相應功能。

Django團隊為我們考慮到這麼多需要用到的功能,可能看到這大家都有點累了,反而我們能認識到Django這一框架的強大功能。

相關焦點

  • 【模型】VERTEX「精靈村原創系列」第三村人 琳希雅預定10月發售!
    tops 公司旗下的 VERTEX 模型所出品,出自「精靈村原創系列」之第三村人「琳希雅」,於15日於官網正式預購開始中!發售日為10月預定! VERTEX 模型原創系列「精靈村」的第三村人,由繪師「天然水道水(パセリ、Parsley)」所繪製的插畫為藍本立體化登場!
  • 「原創」Django第六章、模型操作
    本文轉載自【微信公眾號:java進階架構師,ID:java_jiagoushi】經微信公眾號授權轉載,如需轉載與原文作者聯繫模型的操作回顧上一章中我們建立了一個博客文章的模型,然後通過數據遷移建立我們對應中的資料庫表,這一章我們接著說模型的操作
  • 【模型】Max Factory「saitom原創作品」Stella預定2021年八月發售
    Max Factory 模型出品,出自知名插畫師「saitom」的原創角色「Stella」,以1/7比例模型化登場,於10號在販售商GSC官網正式開始預購!發售日預定為2021年的八月!   充滿惡魔魅力的時尚模型登場! 由人氣繪師saitom所繪製,以惡魔娘與時尚為主題的《DF》系列推出模型!
  • 《未定事件簿》第四章庭審怎麼過 第四章完美庭審通關攻略
    導 讀 未定事件簿第四章庭審攻略是遊戲主線4-17關玩法,玩家們需要在辯論環節出示證物全部回答正確哦,那麼未定事件簿第四章庭審怎麼過
  • 「原創壁紙」挑戰全網最美壁紙,原創專屬設計,不要錯過
    挑戰全網最美頭像,原創專屬設計,不要錯過哈嘍!七七來給大家送頭像來啦!如何設計:請看到最後圖!本期為上期關注、留言忠實粉絲製作的姓名:「高展」「胡登楊」「莊大智」「楊海濤」「劉勇」「洪巖」「鄭」「王」「馮」「陳」「褚」「衛」「蔣」「沈」「韓」「楊」「朱」「秦」「尤」「江哲」「傅建輝」「杜學濤」「吳麗麗」「康剛軍」「白小白」「鄭偉」「郭子東」「戴浩然」「管德林」「康」「丁希峰」「唐」「嶽」…………
  • 「原創」Django第五章、模型建立與遷移
    本文轉載自【微信公眾號:java進階架構師,ID:java_jiagoushi】經微信公眾號授權轉載,如需轉載與原文作者聯繫模型建立與遷移回顧上一章中,我們介紹了模型層的基本結構和基本欄位。這一章,到了該動手的時候了,我們將創建一個自己寫的數據模型類,那麼我們寫啥呢?別忘了,在介紹Django特點的時候,我們知道Django適合做內容,所以基於此特點,我們編寫一個博客豈不樂哉。畢竟博客中最需要的就是文章嘛,好,閒話少敘,我們開始。
  • 「原創頭像」挑戰全網最美頭像,15款原創專屬設計,不要錯過
    「原創頭像」挑戰全網最美頭像,原創專屬設計,不要錯過朋友們,大家好。本期小編言而有信,為上期關注、留言的朋友,製作了15張的籤名頭像。喜歡請關注、留言,每期都會免費設計一大部分,謝謝大家。本期為上期關注、留言忠實粉絲製作的姓名:「劉光明」「李柯莉」「塗」「唐」「李顏宇」「徐」「趙」「尚」「林」「嶽」「張豔紅」「李文紅」「孫越鵬」「薛」「周勇」…………如何快速設計製作:
  • GSC拼裝機娘系列「chitocerium」第四彈新品「XCIX-albere & C-efer」,黑白雙子甜妹妹萌化你的心
    由淺井真紀、huke、GSC聯合出品的第四彈拼裝機娘「XCIX-albere & C-efer」正式發布
  • 「學習筆記」第六章 項目進度管理
    「學習筆記」「項目管理」第一章 什麼是項目管理「學習筆記」「項目管理」第二章 什麼是項目管理「學習筆記」「項目管理」第三章 項目管理流程控制「學習筆記」第四章 項目綜合管理「學習筆記」第五章 項目規模管理想看更多,敬請期待
  • SVG微信交互圖文|創造性的互動設計模型——「偽邏輯判斷邏輯」
    因而本期為各位介紹的案例不局限普通的點擊圖片、高度拉伸效果,而是基於「小編備用」創造性提出的一個交互概念「偽邏輯判斷模型」,在理解這個邏輯概念之前先看看運用該模型製作的商業案例——傑特貝林招聘《中秋節到了,CSL攜玉兔給大家送福利啦》。
  • 」最終章將連續4周向到場者贈送特典「混物語」!
    「傷物語 」最終章將連續4周向到場者贈送特典「混物語」!「混物語」!而本次最終章也會連續4周贈送這份禮物。 2017年1月6日起贈送「第軍話 懲罰小隊」。並且2016你那12月31日TOHO院線會開始發行「傷物語」主題原創會員卡!更有大規模的交通廣告確定開展!東京地鐵METRO13個站18個區從2017年1月2日起一周,會在共252面電子屏上播放15秒的預告片。
  • 「浪客劍心 最終章 The Final/The Beginning」特報解禁
    「浪客劍心 最終章 The Final/The Beginning」特報解禁 動漫 178動漫原創 ▪
  • 「Hello Kitty x 高達模型」即將推出合作模型商品
    「Hello Kitty x 高達模型」即將推出合作模型商品 動漫 178動漫整編 ▪
  • 「炎炎消防隊 貳之章」第二章解析
    「炎炎消防隊 貳之章」第二章解析 動漫 178動漫原創 ▪ 2020-07
  • 動畫工房原創動畫「幸運邏輯」1月放送 PV等情報公開!
    動畫工房原創動畫「幸運邏輯」1月放送 PV等情報公開!」、「可塑性記憶」的動畫工房宣布了本社第二個原創動畫「幸運邏輯」(ラクエンロジック)製作決定,並公開了STAFF、CV陣容,預定於1月開始放送。
  • 「明月頭像」留下你的姓名,32款原創專屬設計頭像壁紙,不要錯過
    「姓名頭像」留下你的姓名,原創專屬設計頭像壁紙,不要錯過朋友們,大家好。本期小編言而有信,為上期關注、留言的朋友,製作了88張的籤名頭像。如何快速設計製作:點擊小編頭像,關注私信:頭像本期為上期關注、留言忠實粉絲製作的姓名:「劉宏龍」「韓磊」「林光陽」「劉豪雲」「李廣聯」「維克森」「薛」「
  • 宇宙學家是如何看待「大爆炸宇宙模型」與「穩恆態宇宙模型」的?
    上個世紀20年代以前,人們心中那個「靜態的宇宙」幾乎已經成型,然而哈勃的發現改變了這一切,「純靜態的宇宙模型」已經被兩個新生的理論所替代,那就是——「大爆炸宇宙模型」和「穩恆態宇宙模型」。我們可以有兩個選擇:可以選擇「大爆炸宇宙模型」,它要求宇宙有一個創生的時刻,它的過去和未來有著天壤之別,有著有限的歷史和未來,當然我們也可以選擇「穩恆態宇宙模型」,它有著永恆的歷史和未來。並且有連續的物質產生,「大爆炸宇宙模型」可以解釋氫和氦的豐度,而「穩恆態宇宙模型」更容易被人們接受,它本質上卻回到了永恆宇宙的保守觀點。
  • 原創音樂劇動畫「高校星歌劇」10月開播 製作與聲優公開
    原創音樂劇動畫「高校星歌劇」10月開播 製作與聲優公開 動漫 178動漫頻道 ▪ 2015-03-20 13:02:03
  • 僅需3步,浩辰3D輕鬆搞定「比較模型」!
    浩辰3D軟體不僅提供了完備的零件、裝配、仿真、工程圖、鈑金、焊接等數十種設計模塊,還提供了「比較模型」和「比較圖紙」功能,讓這一過程高效且精確。01「比較模型」在3D設計時,設計師雖然可以憑藉觀察力簡單分辨出不同模型的材質區別,但對於尺寸、特徵、屬性等細節參數卻很難通過肉眼分辨,如下圖所示。
  • 超級彈丸論破2第四章全收集地圖
    本次給大家帶來的是超級彈丸論破2的第四章全收集匯總,第四章的全收集比較多,從開局就可以發現難度提升了,一開始就需要逃離黑白熊和各種警報熊炸彈熊的追捕,下面附上詳細收集內容。 第一章 第二章 第三章 第四章 超級彈丸論破2第四章全收集