Как реализовать расширенный поиск в django?
Как я могу реализовать расширенный поиск, как на картинке ниже, в Django?
Я хочу, чтобы пользователь мог выбрать оператор OR/AND. При поиске я не хочу, чтобы страница обновлялась. Какова наилучшая техника для этого? Ajax, rest framework, или что-то еще...?
Этот вопрос очень расплывчатый, поэтому вот обзор основных шагов:
- На фронтенде есть форма со всеми желаемыми фильтрами
- При обновлении фильтра или при отправке формы, отправьте
GET
запрос на сервер Django со всеми вашими параметрами, закодированными в URL (как типичный GET запрос)
Затем, на стороне сервера (т.е. Django), предполагая, что вы используете Django Rest Framework:
- Создайте представление/действие (через API View или Viewset) для исследования фильтров .
- Извлеките фильтры, отправленные фронтендом, которые будут расположены в
request.query_params
.
- Выполните запрос в вашей базе данных на основе этих фильтров:
- Вы знаете, какие фильтры ожидаются
- Для каждого из них, если он не пуст, выполните дополнительный
filter
на вашей модели (Model.objects.filter(X=Y)
) - Затем, в конце концов, верните результаты
В Django и DRF есть много способов сделать фильтрацию модели:
- Вы можете использовать
Q
для выполнения сложных запросов - Вы можете использовать пакет
django-filters
для простого добавления фильтрации в ваш набор представлений на основе полученных параметров GET