我有一个定义类别列表的Django模型。每个类别都可以是另一个类别的子类,这个类别列表的深度可能会相当长。
models.py
class Category(models.Model):
code = UUIDField(unique=True, primary_key=True)
name = models.CharField(max_length=100, null=True, blank=True, unique=True)
parent_cat = models.ForeignKey('self', null=True, blank=True)
例如,考虑一下女性服装的类别。它可能包含以下内容:
女士>服装>连衣裙>夏季
一切正常,但我想单独构建一个可以构建单个列表的函数,该列表包含树中每个类别的外推视图。为此,我写了以下内容:
queryset = Category.objects.filter(parent_cat=kwargs['code'])
all_children = []
all_children.append(queryset.values())
for c in queryset:
children = Category.objects.filter(parent_cat=c.code)
if children:
all_children.append(children.values())
all_children.append(children)
我意识到这段代码可能很邋,,我还在学习!
正如你可能意识到的那样,这只会给我两个级别的子对象。
我的问题是:我能编写此代码的最有效方法是什么,它会找到所有可能的类别,直到它到达最后一个没有更多子项的对象?
谢谢!
答案 0 :(得分:0)
你可以尝试使用递归的东西: 用apprpriate数据类型替换列表。
def parseQueryset(queryset)
for x in queryset:
if isinstancex(x, list):
parseQueryset(x)
else:
#do stuff
答案 1 :(得分:0)