Django数据库自关联

2019-05-09  本文已影响0人  火麟腾

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

class Comment(models.Model):

        content = models.CharField(max_length=255)

        ptime = models.DateTimeField(auto_now_add=True)

        parent = models.ForeignKey('self', on_delete=models.CASCADE)

        def __str__(self):

                return self.content

>>> one = Comment.objects.create(content='这是第1条一层评论')

>>> one01 = Comment.objects.create(content='这是第1条一层评论的第1个二层评论', parent=one)

>>> one02 = Comment.objects.create(content='这是第1条一层评论的第2个二层评论', parent=one)

>>> one03 = Comment.objects.create(content='这是第1条一层评论的第3个二层评论', parent=one)

>>> Comment.objects.filter(parent__id=1)    # 查找父评论的子评论

<QuerySet [<Comment: 这是第1条一层评论的第1个二层评论>, <Comment: 这是第1条一层评论的第2个二层评论>, <Comment: 这是第1条一层评论的第3个二层评论>]>

>>> Comment.objects.filter(comment__id=2)  # 查找子评论的父评论

<QuerySet [<Comment: 这是第1条一层评论>]>

>>> c1 = Comment.objects.get(pk=1)

>>> c1.comment_set.all()    # 父评论的子评论,comment是Comment的小写

>>> c101 = Comment.objects.get(pk=2)

>>> c101.parent    #  c101的父评论,parent是Comment的字段

<Comment: 这是第1条一层评论>


ManyToManyField  模型

class Person(models.Model):

        name = models.CharField(max_length=10)

        friend = models.ManyToManyField(to='self')

        def __str__(self):

                return self.name

>>> one = Person.objects.create(name='乔峰')

>>> two = Person.objects.create(name='虚竹')

>>> three = Person.objects.create(name='段誉')

>>> one.friend.add(two,three)

>>> Person.objects.filter(friend__name='乔峰')    # 查找乔峰的好友

<QuerySet [<Person: 虚竹>, <Person: 段誉>]>

>>> p1 = Person.objects.get(pk=1)

>>> p1.friend.all()    # 查找乔峰的好友

<QuerySet [<Person: 虚竹>, <Person: 段誉>]>

上一篇下一篇

猜你喜欢

热点阅读