Code前端首页关于Code前端联系我们

什么是表内自相关? Django ORM 如何创建自相关表?

terry 2年前 (2023-09-24) 阅读数 60 #后端开发

什么是表内自相关

表内自相关是指表内数据和表内相关的对象有相同的字段,所以我们可以直接使用表内关联来设置外键关联您自己的表中的字段。同样,表内关系也分为一对多字段和多对多字段

例如:微博评论,每条评论可以有子评论,但每条评论的字段内容应该是同样的,并且每个评论Comments只有一个父评论,满足一对多的情况。父评论是相关字段,可以对应多个子评论。这是一对多的自关联。

创建自相关表(一对多场景)

在django项目的models中创建评论表。

  1. #评论表
  2. class Comment(models.Model):
  3. #评论内容字段
    content=Kr. 55)
    ? pcomment = 模型。 foreignKey(to='self',null=True)
  4. def __str__(self):
  5. return self.content

,对于数据相关的数据为空,第一个描述。是家长的评论。第二条数据与第一条数据相关联,并且是第一条数据的子注释。同样,最后两条数据是第二条数据的子注释。

什么是表内自关联?Django ORM 如何创建自关联表?

然后找到第一位数据的孩子。 Comment:

  1. #第一个数据的ID为1,可以通过过滤父评论来过滤关联字段等于1的对象
  2. print(Comment.objects.filter(pcomment_id=1) )
  3. #根据子评论关联ID,进一步查找父评论的内容
  4. print(Comment.objects.filter(pcomment_id=2).values('pcomment__content')) # 根据父评论ID反向查找子评论 Comment
  5. print(Comment.objects.filter(id=1).values('comment__id'))

注:国外键映射在子评论中,相关字段为子评论,子评论检查其父评论的评论被转发,检查子评论的父评论被反向。

多对多表自相关

创建姓名和朋友多对多字段的表。一个人可以有几个朋友,也可以和几个人成为朋友。一个人找朋友是对的。直接搜索,找到某人的好友是反向搜索。

  1. class Person(models.model):
  2. name = models.CharField(max_length=12)
    ♶❀❀❀ = 模型。 ManyToManyField (to='self',symmetry=False,related_name='ship')
  3. def __str__(self):
  4. ❝❝❝ :

    什么是表内自关联?Django ORM 如何创建自关联表?

    什么是表内自关联?Django ORM 如何创建自关联表?

    1. # 查找同性恋s沁阳的朋友
    2. # 正向搜索相关字段 __name
    3. print(Person.objects.filter('='沁阳'end)s)s) # 反向搜索沁阳的同性恋朋友沁阳
    4. # print(Person.objects.all().filter(ship__name='沁阳'))
    5. # 搜索王帅的同志好友? name='王帅').friends.all())
    6. #反向搜索王帅好友也为空
    7. print(Person.objects.filter(ship__name='王帅 ' ))
    8. # 反向搜索好友为沁阳的人
    9. print(Person.objects.get(name='沁阳').ship.all())

      search by 同性恋好友为王帅的人
    10. # print(Person.objects.get(name='王帅').ship.all())
    11. # 同性恋好友包含秦阳人哈相反方向
    12. print(Person.objects.filter(name='沁阳').values('ship__name'))

    注:寻找某人的好友是前进方向。搜索在您的朋友中有某人的人是反向搜索

版权声明

本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

热门