django數據模型用python類的屬性和方法方式對數據庫表進行了映射,在操做數據庫過程當中,咱們是對每一個模型對象進行操做,而不是採用底層sql的方式,固然可能有的人喜歡用sql的方式直接操做數據庫,我以前也是寫sql對數據進行操做,但話說回來,既然咱們選擇用了用django框架開發,那咱們就應該充分利用框架給咱們提供好的方式去進行,這樣既符合django的設計哲學,固然也給咱們開發帶來不少便利,那今天咱們就從基本的提及,由於既然談數據庫,就不得不說實體,而實體之間就存在的各類關係,因此今天咱們就說下django模型的1對多和多對多關係。python
在開始咱們django模型關係時,爲方便咱們更好的理解django模型,咱們先從咱們熟悉的基本關表講起,咱們先得了解一個基本問題,什麼是1對多、多對多,爲何存在,咱們該如何用關係型數據庫表去描述,如何你對以上問題摸不着頭腦,那麼莫着急,咱們一一說來,簡單說咱們剛纔說的都是關係型數據庫中數據描述實體之間的關係,什麼是實體,書中講的都很抽象,咱們舉幾個例子很容易說明:好比一個學生就是一個實體,一個老師也是一個實體,一個球員也是一個實體,球隊等這些都是所說的實體,每一個實體都有本身的屬性,好比學生就有姓名,性別,球員有編號,姓名,球隊有隊名等,經過這些實體的屬性描述,在咱們現實世界中會很容易發現他們實際上是有關係的,好比球員和球隊的關係,咱們如何來分辨是究竟是哪一種關係呢?其實有一個很簡單的辦法(在這裏我要感謝我大學老師,哈),找個紙,把多個實體畫出來(好比用方框表示),而後用筆在其中一個實體上寫上1,而後開始讀1個xx對應xx實體,寫完後而後反過來再來,表另外一個實體寫上1,再翻過來讀一次,如何其中有發現某個實體是多的就寫上m,若是兩邊讀完都是多對多的就寫上n:m,利用該方法,很容易實體出實體以前的關係,示意圖以下:sql
上面兩個圖分別表示了多對1和多對多關係,其實多對1也是反過來的1對多,沒什麼區別,那咱們須要瞭解,在沒有models模型前,咱們是數據表中如何處理呢,好比咱們就拿上面實體來舉例說明:
數據庫
學生(姓名,班號)和班級(班號),由於1個班級能夠有多個學生,而一個學生只能屬於1個班級,因此他們是1對多關係,用關係數據庫描述須要在多的一方(學生)增長班號外鍵關聯到班級中的班號,這樣就能夠查每一個學生屬於哪一個班號了。django
而後咱們看多對多關係,學生(學號,姓名)和課程(課程號),由於一個學生能夠選擇多門課程,1門課程能夠被多個學生選擇,因此他們是多對多的關係,咱們該如何創建他們之間關係呢,如何找出某個學生學習的課程呢,用咱們上面的方法是不行了,由於這兩個實體都是多的一方,因此呢,要創建他們之間的關係,咱們須要多創建一個關係表,這個關係表中存儲學號和課程號,並設置外鍵分別關聯到學生和課程表中,這樣就變成了兩個1對多,1個學生能夠選擇多門課程,1門課程能夠被多名學生選擇,這樣就能夠根據他們的關係查找每一個學生所學的課程了,基本的理論咱們就說到這,咱們接下來說django模型。框架
咱們之因此上面講那麼多,主要是爲咱們理解django模型作鋪墊,由於理解了上面,再理解咱們的模型就比較容易了,再加上django框架有一部分都幫咱們作了,咱們只管使用就行了,也很方便,但原理咱們仍是要懂一些的,避免出現問題,開始抓瞎呀,咱們創建模型:ide
class Classes(models.Model):學習
cls_num = models.CharField(max_length=30)spa
class Student(models.Model):設計
name = models.CharField(max_length=30)對象
cls_num = models.ForeignKey(Classes)
class Course(models.Model):
c_num = models.ManyToManyField(Student)
以上就是基本的模型,爲方便說明,我只列了須要的字段,實際工做中會比這個複雜些,但萬變不離其宗,理解了這個簡單的,看其它的也會容易,須要說明的用django模型,不要特別指定id,由於djang在創建數據表的時候會默認創建一個自增加的id, 對於多對多方面,你也不須要創建多餘模型,django會自動爲你創建一個關係表來描述兩個實體的關係,因此這就是用框架的好處,可讓你少些不少代碼,並且從另外一方面講,你的代碼野會變得比較強壯,今天咱們就講到這裏了,下一篇咱們講如何經過數據模型對數據庫表進行操做。