當你在django中配置完數(shù)據(jù)庫時衩婚,肯定要在models.py
文件中創(chuàng)建數(shù)據(jù)庫表的結(jié)構(gòu)。當然厉斟,建單表肯定是好建的珍语,關(guān)鍵是數(shù)據(jù)為一對多或多對多的時候,建立的表就麻煩些集漾。
外鍵的調(diào)用
比如我要建個book表和一個Publisher表切黔,我們知道,一本書只能由一個出版社出版具篇,而一個出版社可以出多本書纬霞,所以書和出版社之間存在一對多的關(guān)系。所以我可以這樣寫
from django.db import models
class Publisher(models.Model):
name = models.CharField(max_length=30, verbose_name="名稱")
address = models.CharField("地址", max_length=50)
city = models.CharField('城市',max_length=60)
class Book(models.Model):
title = models.CharField(max_length=100)
# django 2.0后驱显,添加外鍵時要再加一個on_delete參數(shù)才可以诗芜,
# on_delete有多少個選項呢:
#CASCADE:這就是默認的選項,級聯(lián)刪除埃疫,你無需顯性指定它伏恐。
#PROTECT: 保護模式,如果采用該選項栓霜,刪除的時候翠桦,會拋出ProtectedError錯誤。
#SET_NULL: 置空模式叙淌,刪除的時候秤掌,外鍵字段被設(shè)置為空,前提就是blank=True, null=True,定義該字段的時候鹰霍,允許為空闻鉴。
#SET_DEFAULT: 置默認值,刪除的時候茂洒,外鍵字段設(shè)置為默認值孟岛,所以定義外鍵的時候注意加上一個默認值。
publisher = models.ForeignKey(Publisher, on_delete=models.CASCADE)
因為一個出版社對應(yīng)多本書督勺,所以書是多的那一方渠羞,所以要把外鍵放到書的那個表中。
多對多建立數(shù)據(jù)表
當我再添加一個作者表的時候智哀,因為一本書可以有多個作者次询,而一個作者可以寫多本書,所以書和作者之間存在多對多的關(guān)系瓷叫。我可以這樣寫
from django.db import models
class Author(models.Model):
name = models.CharField(max_length=30)
def __str__(self):
return self.name
class Book(models.Model):
title = models.CharField(max_length=100)
# 這個多對多關(guān)系寫到哪個表中都可以
authors = models.ManyToManyField(Author)
這樣屯吊,基本的一對多和多對多數(shù)據(jù)表就創(chuàng)建完成了送巡。