Как сделать создание массива с использованием двух моделей более эффективным?

Я хочу создать массив для конкретной нужды. У меня есть некоторые параметры, я вызываю модель (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
)
Вернуться на верх