我有一个包含父子关系的类别列表:
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
等...
最好的方法是什么?
答案 0 :(得分:4)
取决于你的实际用例,这可能有点过分,但看看django-mptt,(修改的预订树遍历),这是一个简化使用sql数据库处理分层数据的库(在此case,django)
答案 1 :(得分:2)
你可以这样做
categories ={}
map(lambda c: categories.setdefault(c.cat_parent, []).append(c),\
Categories.objects.filter(cat_parent__isnull=False)\
.select_related('cat_parent'))
你会得到categories
像
{
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 %}
答案 2 :(得分:0)
那这样的事情呢?
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上,您可以执行以下代码以返回父字典:
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
},
希望它能对我有所帮助。