Django "ИЛИ запросы в ** kwargs" для фильтрации - PullRequest
1 голос
/ 03 октября 2019

У меня есть существующий ** filter_kwargs, используемый для фильтрации "и", как мне вставить запросы "или"? в настоящее время предполагаемые запросы «ИЛИ» обрабатываются как «и» запрос.

Вот мой базовый код:

search_text = form_data.get("search_text", "").strip(" ")

filter_kwargs = {
    "is_active": True,
    "is_admin": False,
}


if search_text != "":
    // these are the supposed "OR" queries. how do I insert "OR" queries in kwargs?
    filter_kwargs['user__first_name__icontains'] = search_text
    filter_kwargs['user__last_name__icontains'] = search_text
    filter_kwargs['user__email__icontains'] = search_text


Profiles = Profile.object.filter(**filter_kwargs)

1 Ответ

2 голосов
/ 03 октября 2019

Вы можете обернуть элементы в Q объектах и ​​«сложить» их логическим или:

from django.db.models import <b>Q</b>

Profiles = Profile.object.filter(<b>Q(</b>**filter_kwargs<b>, _connector=Q.OR)</b>)

Однако, похоже, что первые элементы должны рассматриваться как AND, вы можете сделать этодобавив их на уровне фильтра (не на уровне Q):

filter_kwargs = {}
if search_text:
    filter_kwargs['user__first_name__icontains'] = search_text
    filter_kwargs['user__last_name__icontains'] = search_text
    filter_kwargs['user__email__icontains'] = search_text

Profiles = Profile.object.filter(
    Q(**filter_kwargs, _connector=Q.OR),
    is_active=True,
    is_admin=False
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...