如何使用Django模板和ManyToMany字段获取家谱?

时间:2015-03-28 04:58:35

标签: python django

我需要家谱,我这里没有使用任何图书馆(你能否提一下)。首先,你可以先看看我的模型,这样你就会明白这个想法。

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>

以上代码正常工作,输出就像......

enter image description here

但是,如果我有n个孩子,然后孩子的孩子以及如何再次自动化该过程怎么办? (在模板中?)。看到我有这个想法,如果你有任何想法,那么请在这里告诉我。

1 个答案:

答案 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>