在django-mptt中使用儿童自定义查询

时间:2015-02-24 08:28:41

标签: django django-mptt

我为我的模型添加了一个自定义字段(状态)。但是我想为孩子们使用自定义查询:

我的模板标签是:

def get_top_menu(context):    
    item = Item.objects.all()
    try:
       item = Item.objects.filter(position__position='top')
    except ObjectDoesNotExist:
       item = Item.objects.none()
   return {
      'nodes': item,         
   }

和模板:

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

doc

如何为children使用自定义查询?

1 个答案:

答案 0 :(得分:0)

查看MPTTModel实例方法文档(在“模型和管理器”部分下)。有一个get_children()方法,它以树的顺序创建一个包含模型实例的直接子节点的QuerySet。使用此方法优于ORM为实例的子项提供的反向关系的好处是,在实例是叶节点(没有子节点)的情况下,可以避免数据库查询。