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



给定一个模型:

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

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

获取项目所有相关项目(包括其"主控"的母版(的最佳方法是什么?

例如,如果创建一个"子"child=Example(name="Child")和一个母亲mother=Example(name="mother", master=child),最后创建一个祖母,grandmother = Example(name="grandmother", master=mother),则该命令child.example_set.all()仅返回mother。如何获取所有相关项目,包括此示例中的grandmother

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

有一些很棒的库可以在Django中实现树 - 参见django-mptt(MPTT(或django-treebeard(MP(。我建议先看看树胡子教程。

最新更新