Django數據庫多對多數據關系


本文主要描述Django數據中一對一的數據關系,創建app等配置不再贅述。

Django操作數據庫,使用ORM

ORM:關系映射對象,把傳統的SQL語句封裝成了類和對象的形式,在操作表中的記錄時,就像在操作類和對象一樣。

使用默認數據庫:sqlite

操作在models.py文件中完成。

多對多關系

舉例:一個出版社發表多個文章,一篇文章也可以對多個出版社發表

ManyToManyFiled():關聯兩個表的函數,但是函數的設置位置,在模型中任選一個即可,不能在兩個模型中都設置此函數。

class Publication(models.Model):
    id = models.AutoField(primary_key=True)
    title = models.CharField(max_length=30, null=True)  # 出版社名稱

    class Meta:
        db_table = 'Publication'

    def __unicode__(self):
        return 'Publication-Name: %s' % self.title


class Article(models.Model):
    id = models.AutoField(primary_key=True)
    headline = models.CharField(max_length=100, null=True)

    # 讓文章關聯出版社
    publication = models.ManyToManyField(Publication)

    class Meta:
        db_table = 'Article'

    def __unicode__(self):
        return 'Article-Name: %s' % self.headline

創建完數據庫模型之后,就需要創建數據庫變更文件,應用數據庫變更文件創建表的操作。
創建數據庫變更文件:python manage.py makemigrations
應用數據庫變更文件:python manage.py migrate
可以使用SQLite可視化工具查看已經建立成功的數據庫表

由於未進行其他配置,所以只能在shell環境下,對數據庫進行操作。
進入shell環境的命令:python manage.py shell

注意點:

1)注意ManyToManyField()的設置位置;該實例中設置了Article模型中,在綁定兩張表的時候,利用Article的對象a1進行綁定的,a1.publication.add()。但是不能使用Publication的對象p1進行綁定(p1.article.add())。

兩張表之間的相互查詢關系

查詢a1這篇文章所屬的出版社有哪些

print a1.publication.all()

查詢某一出版社,所包含的所有文章有哪些

print p1.article_set.all()



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM