Каков предпочтительный метод для использования оператора OR в строке запроса?

Я пишу API с Django-tastypie. API, использующий строку запроса для фильтрации объектов.

Например: если я хочу найти клиентов с именем 'foo' в first_name, я передаю эту строку запроса конечной точке API для фильтрации:

myapi/customers/?first_name__icontains=foo

Для поиска клиентов, в имени которых есть "foo" И "bar" в фамилии:

myapi/customers/?first_name__icontains=foo&last_name__icontains=bar

Я хочу найти клиентов, у которых есть "foo" в имени или фамилии. Но я не знаю, как лучше указать фильтр OR в строке запроса.

Вариант: могу решить с использованием || в строке запроса и ее разборе на стороне сервера, как показано ниже, но я не знаю, что это предпочтительный метод:

myapi/customers/?first_name__icontains=foo||last_name__icontains=foo

Я видел API, которые используют строку запроса для фильтрации результатов, но я не нашел ни одной связанной статьи с выполнением ИЛИ фильтрации в строке запроса. Этот подход неверен? Если не;

Каков наилучший способ использовать оператор OR в строке запроса?

Примечание: джанго-лакомство __icontains для поиска в базе данных, игнорируйте его:

last_name__icontains=foo равно last_name ilike '%foo%' в SQL.

1 ответ

Однако я не имею никакого опыта в области вкусных пирогов или запросов в Django, используя Q https://docs.djangoproject.com/en/dev/topics/db/queries/,

Так что везде, где в Delicious можно определить возвращаемый запрос.

Customer.objects.filter(Q(first_name__icontains='foo') | Q(last_name__icontains='bar'))

Примечание. Если объект соответствует обоим параметрам, этот объект будет возвращен дважды. Если это проблема, используйте.distinct(). Однако это дорогая БД.

Другие вопросы по тегам