给定一个模型:
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(。我建议先看看树胡子教程。