【发布时间】:2015-06-01 13:23:27
【问题描述】:
我需要家谱,我这里没有使用任何库(你能建议一下吗)。首先你可以先看看我的模型,这样你就会知道这个想法。
class FamilyMember(models.Model):
familyname = models.ForeignKey(FamilyName)
first_name = models.CharField(max_length=50)
parents = models.ManyToManyField('self', null=True, blank=True, related_name='p', symmetrical=False)
children = models.ManyToManyField('self', null=True, blank=True, related_name='c', symmetrical=False)
我的视图函数看起来像
def explore_home(request):
old_date = FamilyMember.objects.filter(familyname__name = family_name).aggregate(Min('birth_date'))
member_obj_all = FamilyMember.objects.get(familyname__name = family_name, birth_date=old_date['birth_date__min'])
我正在使用@987654321@ 构建家谱。
在我的 django 模板中我很喜欢
<div class="tree">
<ul>
<li>
<a href="#">{{ family_name }}</a>
<ul>
<li>
<a href="#">{{ member_obj_all }}</a>
{% if member_obj_all.children.all %}
<!-- here we go again -->
<ul>
{% for child_obj in member_obj_all.children.all %}
<li>
<a href="">{{ child_obj }}</a>
{% if child_obj.children.all %}
<!-- here we go againg -->
<ul>
{% for grand_child_obj in child_obj.children.all %}
<li>
<a href="">{{ grand_child_obj }}</a>
</li>
{% endfor %}
</ul>
{% endif %}
</li>
{% endfor %}
</ul>
{% endif %}
</li>
</ul>
</li>
</ul>
</div>
上面的代码正常工作,输出就像......
但是,如果我有 n 个孩子,然后是孩子的孩子,以及如何再次自动化该过程。? (在模板中?)。看到我只是有这个想法,如果你有任何想法,请在这里告诉我。
【问题讨论】:
-
你可以使用递归函数来不断调用自己(模板的“我们再来一次”部分),显然你的视图中应该有递归函数,你应该返回一个字典此处解释的所有嵌套级别stackoverflow.com/questions/6803599/…