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

注意:外键关联是在子评论中,有关联字段的是子评论,子评论查父评论是正向,父评论查子评论是反向。

猜你喜欢

转载自www.cnblogs.com/Kingfan1993/p/9936541.html