Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
django类别列表(父-子)_Django - Fatal编程技术网

django类别列表(父-子)

django类别列表(父-子),django,Django,我有一个具有父子关系的类别列表: class Categories(models.Model): cat_name = models.Charfield() cat_parent = models.ForeignKey('self') 因此,我想将其列为: Category 1 Sub category 1 Sub category 2 Sub category 3 Category 2 Sub category 4 Sub category 5 等等 做这件事的

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

class Categories(models.Model):
  cat_name = models.Charfield()
  cat_parent = models.ForeignKey('self')
因此,我想将其列为:

Category 1
  Sub category 1
  Sub category 2
  Sub category 3
Category 2
  Sub category 4
  Sub category 5
等等


做这件事的最佳方法是什么?

根据您的实际用例,这可能有些过分,但请看一看,(修改的前序树遍历),一个使用sql数据库(在本例中是django)简化层次数据处理的库。

您可以这样做

categories ={}

map(lambda c: categories.setdefault(c.cat_parent, []).append(c),\
    Categories.objects.filter(cat_parent__isnull=False)\
        .select_related('cat_parent'))
你会得到
分类
dict-like

{
    Category 1 : [Sub category 1, Sub category 2, Sub category 3],
    Category 2 : [Sub category 4, Sub category 5]
}
然后在模板中

{% for category, sub_categories in categories.items %}
    {{ category.name }}
    {% for sub_category in sub_categories %}
        {{ sub_category }}
    {% endfor %}
{% endfor %}

像这样的东西怎么样:

class Categories(models.Model):
  name = models.Charfield(max_length=255)
  category = models.ManyToManyField('self', blank=True)
  is_parent = models.BooleanField()

  def __str__(self)
     return self.name
通过这种方式,可以将父对象和子对象存储在同一模型集中,并将它们引用回父对象。然后在ViewSet上,您可以执行以下代码返回父dict:

queryset = Category.objects.filter(is_parent=True)
看起来像这样:

{
    "name": "Parent Category",
    "category": [
        "1",
        "2",
        "3",
        "4",
        "5",
        "6",
        "7",
    ],
    "is_parent": true
},
{
    "name": "Parent Category 2",
    "category": [
        "8",
        "9",
        "10",
    ],
    "is_parent": true
},

希望它有帮助,它确实帮助了我。

Wain那么我如何替换我的返回语句,它当前是t=loader.get_template('bla');c=上下文(“目录”,目录);返回HttpResponse(t.render(c))您应该只更改这一行
c=context('cat_list',cat_list')
c=上下文(“类别”,类别)