django--orm表自關聯詳解
阿新 • • 發佈:2018-11-09
什麼是表內自關聯
表內自關聯是指表內資料相關聯的物件和表是相同欄位,這樣我們就直接用表內關聯將外來鍵關聯設定成自身表的欄位。同樣表內關聯也分一對多欄位和多對多欄位
例如:對於微博評論,每條評論都可能有子評論,但每條評的欄位內容應該都是相同的,並且每條評論都只有一個父評論,這就滿足了,一對多的情形。父評論為關聯欄位,可以對應多個子評論,這就是一對多的自關聯。
建立自關聯表(一對多情景)
在django專案的models中建立評論表。
#評論表 class Comment(models.Model): #評論的內容欄位 content=models.CharField(max_length=255) #評論的釋出時間 push_time=models.DateTimeField(auto_now_add=True) #關聯父評論的id,可以為空 pcomment = models.ForeignKey(to='self',null=True) def __str__(self): return self.content
新增資料,第一條資料關聯欄位為空,說明是父評論,第二條資料關聯了第一條資料說明是第一條資料的字評論,同樣後兩條資料是是第二條資料的子評論
接下來查詢第一條資料的子評論:
#第一條資料的id是1,可以通過篩選父評論關聯欄位等於1的物件 print(Comment.objects.filter(pcomment_id=1)) #根據子評論關聯id正向查詢父評論的內容 print(Comment.objects.filter(pcomment_id=2).values('pcomment__content')) #根據父評論的id反向查詢子評論 print(Comment.objects.filter(id=1).values('comment__id'))
注意:外來鍵關聯是在子評論中,有關聯欄位的是子評論,子評論查父評論是正向,父評論查子評論是反向。