0

再帰関数の出力から単一のクエリセットを取得しようとしていますが、パフォーマンスの問題が発生しています。

基本的に、個々のクエリセットを結合しようとすると、処理にかかる時間が2倍になるようです(実装のためにこれを期待していました)が、これをより効率的に行うことができるかどうか疑問に思っていました.

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