0

我正在尝试从递归函数的输出中获取单个查询集,但遇到了性能问题。

基本上,尝试组合单个查询集的行为似乎使处理时间增加了一倍(由于实施,我期待这一点)但我想知道我是否可以更有效地做到这一点。

def intersect(self, list_of_querysets):
    combined = list_of_querysets[0]
    for queryset in list_of_querysets:
        combined = combined | queryset
    return [combined]


def _get_template_folders(self, template_folder_list):
    """
    :rtype : list
    """

    parents = []
    for template_folder in template_folder_list:
        if not TemplateFolder.objects.filter(pk=template_folder).exists():
            continue
        templates = TemplateFolder.objects.filter(pk=template_folder)
        for template in templates:

            parent_folders = self._get_template_folders([template.template_folder_parent_id])
            if parent_folders is not None:
                parents.extend(parent_folders)

        if templates is not None:
            parents.append(templates)
    if parents:
        return parents
    else:
        return None

template_folders_list = self.intersect(self._get_template_folders(template_folder_list))
4

1 回答 1

1

没有看到你的模型很难说,但你的 TemplateFolder 模型似乎是某种树结构。如果是这样,您应该研究使用 MPTT 之类的东西将其存储在数据库中:这是一种算法,它根据左右节点值在每一行上注释树结构的描述,因此可以查询 a 下的所有内容特定的父级效率极高。有一个很棒的 Django 实现:django-mptt

于 2013-04-24T15:31:06.070 回答