如何检索Django中的子项

如何检索Django中的子项,django,Django,我有这样一个模型类别: class Category(TimeStampedModel): category_parent = models.ForeignKey('self', blank=True, null=True) name = models.CharField(max_length = 200) slug = models.SlugField(unique=True) def __str__(self): return self.nam

我有这样一个模型类别:

class Category(TimeStampedModel):
    category_parent = models.ForeignKey('self', blank=True, null=True)
    name = models.CharField(max_length = 200)
    slug = models.SlugField(unique=True)
    def __str__(self):
        return self.name
我想要的是首先显示所有没有父类别的类别,然后在嵌套列表中显示它们各自的子类别:例如:

Flowers
  Lilac
  Rose
Trees
  Maple
所以我尝试的是:

def get_categories(request):
    categories = Category.objects.filter(category_parent=None)
    return {'categories' : categories}
但是,当我试图显示每个类别的子类别时,都没有显示,按照我的示例,我只得到了鲜花和树木

<ul class="nav-list">
     {% for category in categories %}
         <li class="nav-item"><a class="nav-link" href="#">{{ category.name }}</a>
         {% if category.categories %}
              <ul class="nav-submenu">
                {% for subcategory in category.categories %}
                <li class="nav-submenu-item"><a href="#">{{ subcategory.name }}</a></li>
                {% endfor %}
              </ul>
         {% endif %}
         </li>
     {% endfor %}
 </ul>
    {categories%%中的类别为%s}
  • {%if category.categories%}
      {category.categories%}中的子类别为%
    • {%endfor%}
    {%endif%}
  • {%endfor%}

如何也获取子项?

您没有为category\u父字段指定相关名称“categories”,因此无法通过category.categories访问它。您可以尝试使用此表达式

{% for subcategory in category.category_set.all %}
    <!-- subcategory staff -->
{% endfor %}
{%用于category.category\u set.all%}
{%endfor%}

在您的模板中。

查看mptt算法,它将为您省去麻烦—您完全正确!但即使替换了这个,我也得到了同样的结果:没有显示子项,我只有没有父项的类别。那么它应该可以工作了。您是否也将模板中的if子句从{%if category.categories%}更改为{%if category.categories\u set.all%}?