再帰関数の出力から単一のクエリセットを取得しようとしていますが、パフォーマンスの問題が発生しています。
基本的に、個々のクエリセットを結合しようとすると、処理にかかる時間が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))