我需要家谱,我这里没有使用任何图书馆(你能否提一下)。首先,你可以先看看我的模型,这样你就会明白这个想法。
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'])
我正在使用this code
来构建家谱。
在我的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个孩子,然后孩子的孩子以及如何再次自动化该过程怎么办? (在模板中?)。看到我有这个想法,如果你有任何想法,那么请在这里告诉我。
答案 0 :(得分:0)
尝试这样的(未经测试):
//child.html
<a href="#">{{child}}</a>
{% if child.children.count %}
<ul>
{% for child_obj in child.children.all %}
<li>
{% include 'child.html' with child=child_obj %}
</li>
{% endfor %}
</ul>
{% endif %}
//tree.html
<div class="tree">
<ul>
<li>
<a href="#">{{ family_name }}</a>
<ul>
<li>
<a href="#">{{ member_obj_all }}</a>
{% if member_obj_all.children.count %}
<ul>
{% for child_obj in member_obj_all.children.all %}
<li>
{% include 'child.html' with child=child_obj %}
</li>
{% endfor %}
</ul>
{% endif %}
</li>
</ul>
</li>
</ul>
</div>