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=上下文(“类别”,类别)代码>