Я пытаюсь получить один запрос из вывода рекурсивной функции, и я сталкиваюсь с проблемой производительности.Batch union django querysets
По существу, кажется, что попытка объединить отдельные заказы удваивает время, затрачиваемое на обработку (я ожидал этого из-за реализации), но мне было интересно, могу ли я сделать это более эффективно.
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))
Это и я должен был упомянуть, что get_template_folders примерно так же эффективен, как и ограничения, наложенные на меня. то, что я хотел сделать, это объединить его с пересечением, чтобы ускорить дедупликацию части кода, поскольку get_template_folders выдает много обманов. Я хотел бы использовать что-то вроде django-mptt, но, к сожалению, мы очень тесно связаны с другим приложением, которое изложило наши таблицы базы данных. Мы просто общаемся с ним ... Спасибо, что посмотрели. – Jharwood