我正在尝试在Django中建立家谱,但我不知道如何引用对象的子代以及对象的子代的子代,依此类推。
这是我的模型,具有要用来获取家谱的功能:
class Member(models.Model):
referrals = models.ManyToManyField("self", symmetrical=False)
def tree(self):
refs = {}
for ref in self.referrals.all():
refs[ref] = ref.tree()
return refs
这似乎可行,但是,如果孩子们也有孩子,那么它会显示以下内容:
maximum recursion depth exceeded while calling a Python object
理想情况下,我希望树函数返回一个作为嵌套列表的字符串对象,因此我可以将结果放在模板中,如下所示:
<ul>
<li>Member A</li>
<li>Member B
<ul>
<li>Member BA</li>
<li>Member BB</li>
</ul>
</li>
<li>Member C</li>
</ul>
将感谢您的任何建议,谢谢
答案 0 :(得分:0)
如果您构建的树中有一个孩子指向父母之一,则您将在图形中创建一个循环,从而使tree
函数无限运行。
然后,您必须避免向要添加的成员添加以某种方式具有父母关系的referral
。
此外,为了清楚起见,我建议您命名反向关系:
# Add related name in order to access parents from a member
# like this:
# member.parents instead of members.referrals_set
referrals = models.ManyToManyField("self", symmetrical=False, related_name='parents')