1

作为 Django/python 世界中的新手,我无法找到检查对象是否有子对象的方法。

一个例子:

Class MyItems
        title = models.CharField(max_length=50)
        parent = models.ForeignKey('self',null=True, blank=True,related_name='subitems')

然后在我的模板中:

{% for item in MyItems %}
<li> {{ item.title }} </li>
    {% if item **IS A PARENT OF CHILDREN** %}
        <p>This is what I want</p>
    {% endif %}
{% endfor %}  

我可以查看一个项目是否有父级没有问题,但是如何做其他方式,判断一个项目是否是另一个项目的父级?

谢谢!

4

2 回答 2

2

如果你想要你的对象之间的递归父子关系,你应该看看使用 MPTT

http://django-mptt.github.com/django-mptt/

<ul class="root">
{% recursetree nodes %}
    <li>
        {{ node.name }}
        {% if not node.is_leaf_node %}
            <ul class="children">
                {{ children }}
            </ul>
        {% endif %}
    </li>
{% endrecursetree %}
</ul>

在这里的食谱中谈到: https ://code.djangoproject.com/wiki/ModifiedPreorderTreeTraversal

要了解 MPTT 在数据级别的工作原理,请查看http://en.wikipedia.org/wiki/Nested_set_model

显而易见的解决方案的问题是,对于每个附加级别的子级,都需要另一个查询 - 这变得非常低效。

# this is an additional query AND will not be recursive.
{% if item.child_set.all.count > 0 %} 
于 2012-09-05T15:20:57.610 回答
2

如果我正确理解了这个问题,它应该像这样简单:

{% if item.subitems.exists %}
于 2012-09-29T14:38:26.857 回答