Django建外鍵和多對多數(shù)據(jù)表

當(dāng)你在django中配置完數(shù)據(jù)庫時,肯定要在models.py文件中創(chuàng)建數(shù)據(jù)庫表的結(jié)構(gòu)。當(dāng)然,建單表肯定是好建的,關(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:這就是默認(rèn)的選項,級聯(lián)刪除,你無需顯性指定它。
    #PROTECT: 保護(hù)模式,如果采用該選項,刪除的時候,會拋出ProtectedError錯誤。
    #SET_NULL: 置空模式,刪除的時候,外鍵字段被設(shè)置為空,前提就是blank=True, null=True,定義該字段的時候,允許為空。
    #SET_DEFAULT: 置默認(rèn)值,刪除的時候,外鍵字段設(shè)置為默認(rèn)值,所以定義外鍵的時候注意加上一個默認(rèn)值。
    publisher = models.ForeignKey(Publisher, on_delete=models.CASCADE)

因為一個出版社對應(yīng)多本書,所以書是多的那一方,所以要把外鍵放到書的那個表中。

多對多建立數(shù)據(jù)表

當(dāng)我再添加一個作者表的時候,因為一本書可以有多個作者,而一個作者可以寫多本書,所以書和作者之間存在多對多的關(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)建完成了。

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

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

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