Набор запросов Django получает все данные, которые передают выбранную дату

#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. После небольшой перенастройки моего кода это сработало, спасибо.