django查询集的批处理联合

时间:2013-04-24 15:19:58

标签: python django django-1.3

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

基本上似乎尝试组合各个查询集的行为是将处理所需的时间加倍(我因为实现而期待这一点),但我想知道我是否可以更有效地执行此操作。

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))

1 个答案:

答案 0 :(得分:1)

没有看到你的模型很难说,但似乎你的TemplateFolder模型是某种树形结构。如果是这样,你应该调查使用像MPTT这样的东西将它存储在数据库中:这是一个算法,用左右节点值对每一行的树结构的描述进行注释,从而查询下的所有内容。特定的父母非常有效。有一个很棒的Django实现:django-mptt