Поисковый запрос по дате Django - PullRequest
1 голос
/ 09 июля 2020

У меня есть панель поиска, которая отправляет запрос в конечную точку. Конечная точка фильтрует объекты и обновляет интерфейс. Это фильтрация:

for word in query.split():
    objects = Object.filter(
        Q(name__icontains=word) |
        Q(date__icontains=word)
    )

Как видите, я фильтрую date. Как я могу сделать так, чтобы при поиске January появлялись все даты из January. Или, если я найду 07/18/2005, появятся любые объекты с этой датой. Спасибо!

1 Ответ

0 голосов
/ 09 июля 2020

Ну, судя по вашему объяснению, не совсем понятно, что вы пытаетесь выполнить sh. Я предполагаю, что пользователь может ввести какие-то данные, чем вам нужно для обработки этих данных и выполнения запроса.

Например, что означает «январь»? Январь этого года или что-то еще. В январе любого года? Вы понимаете, что я имею в виду?

Обычно в этих случаях я обрабатываю вводимые пользователем данные и формирую диапазон дат, который может быть помещен в запрос как from_date - end_date. Например, если ваш «январь» означает январь этого года, тогда диапазон от 1 января 2020 года до 31 января 2020 года. В этом случае у вас будет:

from_date = "01/01/2020"
to_date = "31/01/2020"

, и ваш запрос будет выглядеть так:

filter=(Q(date__gte=from_date) & Q(date__lte=to_date))

Кстати, __gte означает greatherthan_or_equal, а __lte означает lowerthan_or_equal.

UPDATE

Если вам нужно отфильтровать все даты одного месяца в любой год, вы также можете сделать что-то вроде:

filter(date__month='1')

или, если вы хотите sh добавить год:

filter(date__year='2019').filter(date__month='1')

Хотя первый вариант дает вам больше гибкости, потому что вы можете искать через месячные границы второй вариант более точно соответствует тому, что вы ищете.

Надеюсь, это поможет.

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