Python 在Django queryset中迭代无限数量的子对象
我有一个Django模型,它定义了一个类别列表。每个类别都可以是另一个类别的子类别,并且这个类别列表的深度可能会持续相当长的时间 型号.pyPython 在Django queryset中迭代无限数量的子对象,python,django,Python,Django,我有一个Django模型,它定义了一个类别列表。每个类别都可以是另一个类别的子类别,并且这个类别列表的深度可能会持续相当长的时间 型号.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 =
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)
女式>服装>连衣裙>夏季
这一切都很好,但我想分别构建一个函数,该函数可以构建一个列表,其中包含树中每个类别的外推视图。为此,我写了以下内容:
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)
我意识到这段代码可能相当草率,我还在学习
正如您可能意识到的,这只会给我两个级别的子对象
我的问题是:我可以用什么最有效的方式来编写这段代码,以便它能够找到所有可能的类别,直到它到达最后一个没有子对象的对象
谢谢 您可以尝试使用递归,如下所示: 用适当的数据类型替换列表
def parseQueryset(queryset)
for x in queryset:
if isinstancex(x, list):
parseQueryset(x)
else:
#do stuff
您正在寻找-您可以使用django mptt包:查看这是一个树遍历应用程序。您可能会在他们的代码中找到一个解决方案,或者使用django mptt本身。谢谢分享。一旦我知道了我想要的术语(递归),我就可以从那里算出它了!非常感谢:)