1. 程式人生 > >django--orm表自關聯詳解

django--orm表自關聯詳解

什麼是表內自關聯

表內自關聯是指表內資料相關聯的物件和表是相同欄位,這樣我們就直接用表內關聯將外來鍵關聯設定成自身表的欄位。同樣表內關聯也分一對多欄位和多對多欄位
例如:對於微博評論,每條評論都可能有子評論,但每條評的欄位內容應該都是相同的,並且每條評論都只有一個父評論,這就滿足了,一對多的情形。父評論為關聯欄位,可以對應多個子評論,這就是一對多的自關聯。

建立自關聯表(一對多情景)

在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'))

注意:外來鍵關聯是在子評論中,有關聯欄位的是子評論,子評論查父評論是正向,父評論查子評論是反向。