首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Django和如何检查对象是否有子对象

Django和如何检查对象是否有子对象
EN

Stack Overflow用户
提问于 2012-09-05 23:17:06
回答 2查看 3.2K关注 0票数 1

作为Django/python世界中的一个新手,我找不到一种方法来检查一个对象是否有孩子。

举个例子:

代码语言:javascript
复制
Class MyItems
        title = models.CharField(max_length=50)
        parent = models.ForeignKey('self',null=True, blank=True,related_name='subitems')

然后在我的模板中:

代码语言:javascript
复制
{% for item in MyItems %}
<li> {{ item.title }} </li>
    {% if item **IS A PARENT OF CHILDREN** %}
        <p>This is what I want</p>
    {% endif %}
{% endfor %}  

我可以看到如果一个项目有一个父项目没有问题,但如何做反过来,判断一个项目是否是其他项目的父项目?

谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-09-05 23:20:58

如果您想要对象之间的递归父子关系,则应考虑使用MPTT

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

代码语言:javascript
复制
<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

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

代码语言:javascript
复制
# this is an additional query AND will not be recursive.
{% if item.child_set.all.count > 0 %} 
票数 2
EN

Stack Overflow用户

发布于 2012-09-29 22:38:27

如果我没理解错的话,应该是这样简单的:

代码语言:javascript
复制
{% if item.subitems.exists %}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12284630

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档