如何找到具有多级自关系的django外键的所有相关项?

How to find all related items of django foreign key with multi level self relationships?

给定一个模型:

class Example(models.Model):
    name = models.CharField(max_length=50, blank=True)
    master= models.ForeignKey('Example', on_delete=models.PROTECT, blank=True, null=True)

使用此模型,可以有一个 "Example" 没有任何主控,或者一个 "Example" 可以有另一个 "Example" 的主控值。当然,那个大师 "Example" 可能是另一个 "Example" 的外键。理论上没有外键级别限制。

获取项目的所有相关项目(包括它的主人)的最佳方法是什么 "master"?

例如,如果创建一个"child" child=Example(name="Child")和一个母亲mother=Example(name="mother", master=child),最后是一个祖母,grandmother = Example(name="grandmother", master=mother),则命令child.example_set.all() returns mother。如何获取本例中包括 grandmother 在内的所有相关项?

根据问题中的示例,您描述的是一棵树,您在数据库中将其展平。就个人而言,我会使用 MPTT(修改后的预序树遍历)或 MP(物化路径)之类的东西来实现树,而不是实现我自己的实现。

有一些很棒的库可以在 Django 中实现树——参见 django-mptt (MPTT) 或 django-treebeard (MP)。我建议首先查看 Treebeard tutorial