#python #django #api
#python #django #API
Вопрос:
Я создал объект из вызова модели Project
, который выглядит следующим образом :
[
{
"name": "project A"
"start_date": 2019-01-01
"end_date": 2019-02-15
},
{
"name": "project B"
"start_date": 2019-01-15
"end_date": 2019-02-01
},
{
"name": "project C"
"start_date": 2019-02-27
"end_date": 2019-03-12
},
]
если у меня есть селектор диапазона дат, и я выбираю дату от 2019-01-07
до 2019-02-10
, и мой запрос выглядит следующим образом
model_object = Project.objects.all().filter(start_date__gte=(2019-01-07), end_date__lte=(2019-02-10))
Результатом model_object
набора запросов будет :
{
"name": "project B"
"start_date": 2019-01-15
"end_date": 2019-02-01
},
Теперь я хотел узнать, как я могу отфильтровать запрос таким образом, чтобы я получал весь объект, который выполняется между датой 2019-01-07
до 2019-02-10
, что означает, что результат также должен включать project A
, потому что он все еще продолжается с 2019-01-01
до 2019-02-15
, хотя он начался раньше 2019-01-07
Любая помощь очень ценится, спасибо.
Комментарии:
1. Не уверен, чего именно вы пытаетесь достичь, но как насчет фильтрации только на
end_date
?2. на данный момент я просто пытаюсь получить все данные, которые продолжаются, что означает, что, хотя данные этого объекта были запущены до даты начала моего запроса, но если они все еще продолжаются, тогда получите и его данные.
Ответ №1:
Вы можете попробовать следующим образом:
import dateutil.parser
model_object = Project.objects.filter(start_date__lte=dateutil.parser.parse('2019-01-07'), end_date__gte=dateutil.parser.parse('2019-02-10'))
Комментарии:
1. Привет, tq за ваш быстрый ответ, я попробовал это:
Project.objects.Project.objects.filter(Q(start_date__gte=(2019-01-07))|Q( end_date__lte=(2019-02-10))).values_list("name", "start_date", "end_date")
и теперь это вообще не дает никакого результата2. возможно, вам нужно преобразовать
start_date
иend_date
в правильный тип вашей модели. Можете ли вы показать свою модельProject
?3. в настоящее время оба поля даты являются
DateTimeField()
4. использование обоих
__range
и__gte
работают, но это не дает желаемого результата5. После небольшой перенастройки моего кода это сработало, спасибо.