Фильтр Django из нескольких полей с пустым вводом - PullRequest
0 голосов
/ 07 сентября 2018

Я новичок в Django и сейчас пытаюсь решить проблему фильтрации по конкретному полю. React.js используется для внешнего интерфейса, а Django используется в качестве RESTful API.

Для внешнего интерфейса пользователи могут выбирать поиск по номеру или имени. Информация была успешно собрана. Следующий код только для лучшего понимания и не является полным.

<input type="text" /><label>Search by number</label>
<input type="text" /><label>Search by name</label>

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

Entry.objects.filter(number=123, name="abc")

Как я могу сделать фильтр на основе заданной информации из внешнего интерфейса, например, если пользователь выбирает поиск по имени, что делает Django:

Entry.objects.filter(number=123)

если пользователь выбирает поиск по имени, то Django делает:

Entry.objects.filter(name="abc")

Я понимаю, что на самом деле могу создать две разные конечные точки API, поэтому номер и имя не будут мешать друг другу. Однако, если есть больше полей фильтра, то, безусловно, неэффективно писать каждый отдельный API на основе каждого поля.

Кто-нибудь может мне помочь с этим? Пожалуйста, дайте мне знать, если я объясню это ясно, или нужно предоставить больше информации.

1 Ответ

0 голосов
/ 07 сентября 2018

Вы можете использовать Q объекты для фильтрации результатов с помощью oring

что-то вроде ниже

from django.db.models import Q
Entry.objects.filter(Q(number=123) | Q(name="abc"))

Существуют и другие способы использования Q объектов, ссылающихся на документы .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...