外键关联是在子评论中,有关联字段的是子评论,子评论查父评论是正向,父评论查子评论是反向。
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: 段誉>]>
网友评论