django类别列表(父母子女)

R0b*_*n1k 5 django

我有一个父子关系的类别列表:

class Categories(models.Model):
  cat_name = models.Charfield()
  cat_parent = models.ForeignKey('self')
Run Code Online (Sandbox Code Playgroud)

所以我想列出它们:

Category 1
  Sub category 1
  Sub category 2
  Sub category 3
Category 2
  Sub category 4
  Sub category 5
Run Code Online (Sandbox Code Playgroud)

等等...

最好的方法是什么?

Ale*_*ich 2

你可以这样做

categories ={}

map(lambda c: categories.setdefault(c.cat_parent, []).append(c),\
    Categories.objects.filter(cat_parent__isnull=False)\
        .select_related('cat_parent'))
Run Code Online (Sandbox Code Playgroud)

你会得到categories像这样的字典

{
    Category 1 : [Sub category 1, Sub category 2, Sub category 3],
    Category 2 : [Sub category 4, Sub category 5]
}
Run Code Online (Sandbox Code Playgroud)

然后在你的模板中

{% for category, sub_categories in categories.items %}
    {{ category.name }}
    {% for sub_category in sub_categories %}
        {{ sub_category }}
    {% endfor %}
{% endfor %}
Run Code Online (Sandbox Code Playgroud)