Как отфильтровать с несколькими значениями из флажков в Django? - PullRequest
1 голос
/ 05 октября 2019

У меня есть эта модель пациента с полями: компания, пол, is_alive ...

На странице поиска пациента у меня есть флажки для этих полей. Поэтому, если пользователи хотят найти всех мужчин живых пациентов в компании ..., они отметят этот флажок.

Затем в бэкэнде, в views.py, я собираю значения флажков и помещаю в список под названием «value_list». Затем я выполняю поиск по запросу так:

patient_list = Patient.objects.all()

if "abc" in value_list:
        company = Company.objects.get(name="abc")
        patient_list = patient_list.filter(Q(company=company))

if "alive" in value_list:
        patient_list = patient_list.filter(Q(is_alive=True))

if "male" in value_list:
        patient_list = patient_list.filter(Q(sex=MALE))

У меня вопрос: эффективен ли этот метод фильтрации и является ли он хорошей практикой?

Пожалуйста, сообщите.

Спасибо.

1 Ответ

1 голос
/ 05 октября 2019

С точки зрения производительности все выглядит хорошо. Вы закончите выполнение 1 запроса с этим кодом, потому что Django достаточно умен, чтобы знать, как объединить их в 1 большой запрос, который использует несколько подзапросов.

При этом, вы можете существенно упростить это с помощью условия __in, которое является просто сокращением для нескольких or условий:

Patient.objects.filter(company__in=Company.objects.filter(name__in=values_list)))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...