作为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 %}
我可以看到一个项目是否有父母没有问题,但如何以其他方式做,告诉一个项目是否是其他项目的父项?
谢谢!
答案 0 :(得分: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 %}
答案 1 :(得分:0)
如果我正确地理解了这个问题,那应该就这么简单:
{% if item.subitems.exists %}