django框架(十三:orm的多對多操作)
阿新 • • 發佈:2018-12-18
什麼是多對多? 多對多:一個表中的一條資料對應另一個表中的多條資料;另外一個表中的一條資料對應著前一個表中的多條資料 圖例:
以出版社和文章為例: 怎麼解決多對多的對應關係呢? 不能使用之前的一對多時的外來鍵了,我們可以通過第三張表來表示。如圖:
接下來在models.py檔案中建立圖例的兩個表
class Publiation(models.Model): ''' 出版社(主表) ''' p_name = models.CharField(max_length=50) class Article(models.Model): ''' 文章(從表) ''' a_name = models.CharField(max_length=50) pub = models.ManyToManyField(Publiation)
一對多:ForeginKey一定要設定在從表 一對一和多對多:關係可以設定在任意一個表中
執行兩個命令建立表,會自動建立第三個關係表
往表中新增資料: 先向兩個表新增資料,最後才進行資料的關聯 資料的新增:
p1 = Publiation(p_name='新華出版社')
p1.save()
p2 = Publiation(p_name='東方出版社')
p2.save()
a1 = Article(a_name='個稅改革')
a1.save()
a2 = Article(a_name='大橋通車')
a2.save()
資料表的展示:
a1.pub.add(p1,p2)
a2.pub.add(p2)
關聯表的展示: 該表說明,文章1的出版社有兩個(p1,p2),文章2的出版社為一個(p2)
那麼,多對多的資料又該怎麼查詢呢? 1-根據主表資料查詢從表資料: 查詢東方出版社出版過的所有文章
p = Publiation.objects.get(id=2)
as = p.article_set.all()
for a in as:
print(a.a_name)
2-根據從表資料查詢主表資料; 查詢個稅改革這個文章,共有幾個出版社出版
a = Article.objects.get(id=1) pubs = a1.pub.all() for p in pubs: print(p.p_name)