美文网首页
Django数据库自关联

Django数据库自关联

作者: 火麟腾 | 来源:发表于2019-05-09 13:29 被阅读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: 段誉>]>

    相关文章

      网友评论

          本文标题:Django数据库自关联

          本文链接:https://www.haomeiwen.com/subject/pepcoqtx.html