我有两种不同的模型:
class Parent(models.Model):
# fields...
Class Child(models.Model):
# if first child in the tree
parent = models.ForeignKey(Parent)
# else
# parent = models.ForeignKey('self')
我的系统中只有一个父节点,它可以有多个子节点,每个子节点可以有多个子节点等。实现这种关系的正确方法是什么?我会如果有人知道如何处理这个问题,我想看看工作示例。
我对django-mptt感到满意,但听起来对我的需求过于复杂。我实际上在我的系统中建模真实的人际关系,所以通常父节点只有很少的孩子,其中一些可能也有很少的孩子,并且可能只有四个,也许五代同时存活。所以通常树包含大约十个节点的东西,甚至最大限制为几百个,这是非常罕见的情况。从那个角度看,效率并不是一件大事,所以我更喜欢最简单的解决方案。
答案 0 :(得分:0)
我将使用与自身的ManyToMany关系,如此SO question中所述。
当然,你的degsign需要改变,没有父母和孩子,只有父母或人类或其他东西,从某种意义上说,有一天每个人都可能是父母:)
class Human(models.Model):
children = models.ManyToManyField('self', blank=True)
other_info = ...
example page和reference page会对您有帮助。
请注意,此设计不会以任何方式保护您免于创建“错误”关系。一个人可能是他自己的父亲或祖父或任何一种不可能的情况。在数据库中添加子项之前,您需要自己检查此问题。