Как сделать создание массива с использованием двух моделей более эффективным?
Я хочу создать массив для конкретной нужды.
У меня есть некоторые параметры, я вызываю модель (ProcessType) с ними и фильтрую модель с ними. После этого я вызываю другую модель с временным фильтром и мне нужно выбрать объекты, которые имеют такое же case_type
(строковое) имя, как и ProcessType.
Я создал для этого функцию, но она очень медленная.
Как я могу сделать ее более эффективной?
def case_groups(self, date_1, date_2, process_group):
cases = Case.objects.filter(date_created__range=[date_1, date_2])
process_types = ProcessType.objects.filter(reporting_group__option=process_group)
report_group = []
for i in cases:
for j in process_types:
if j == i.case_type:
report_group.append(i)
print(report_group)
return report_group
Вы можете сделать следующее:
report_group = [
i
for i in cases
for j in process_types
if j == i.case_type
]
Лучше:
Case.objects.filter(
date_created__range=[date_1, date_2],
case_type__in=ProcessType.objects.filter(
reporting_group__option=process_group
)
)
Или если у моделей есть ForeginKey:
Case.objects.filter(
date_created__range=[date_1, date_2],
case_type__reporting_group__option=process_group
)