在Django查询集中迭代无限数量的子对象

时间:2014-09-16 10:47:34

标签: python django

我有一个定义类别列表的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)

我意识到这段代码可能很邋,,我还在学习!

正如你可能意识到的那样,这只会给我两个级别的子对象。

我的问题是:我能编写此代码的最有效方法是什么,它会找到所有可能的类别,直到它到达最后一个没有更多子项的对象?

谢谢!

2 个答案:

答案 0 :(得分:0)

你可以尝试使用递归的东西: 用apprpriate数据类型替换列表。

def parseQueryset(queryset)


    for x in queryset:
        if isinstancex(x, list):
            parseQueryset(x)
        else:
            #do stuff

答案 1 :(得分:0)