Фильтр даты django gte и lte - PullRequest
       41

Фильтр даты django gte и lte

13 голосов
/ 09 марта 2011

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

Система имеет бронирования, которые имеютбыл введен ранее или сделан ранее клиентом.

Если при бронировании pickup_date = 2011-03-01 и dropoff_date = 2011-03-15 и я выполняю запрос с pickup=2011-03-09 и dropoff=2011-03-14 в моих представлениях, как показано ниже, он не возвращаетсякакие-либо результаты, чтобы увидеть, было ли сделано бронирование в течение этого периода.

views.py

def dates(request, template_name='groups/_dates.html'):
    pickup=request.GET.get('pickup','None');
    dropoff=request.GET.get('dropoff','None');
    order = Order.objects.filter(pick_up__lte=pickup).filter(drop_off__gte=dropoff)

    context = {'order':order,}

    return render_to_response(template_name,context,
        context_instance=RequestContext(request))

Есть предложения о том, как это сделать?Или я должен искать альтернативный способ выполнения этого запроса?

Ответы [ 2 ]

19 голосов
/ 09 марта 2011

Возможно ли, что передача необработанной строки в набор запросов имеет неправильный формат, попробуйте преобразовать строки в объекты даты и времени.

Позже вы можете попробовать использовать поиск диапазона, более эффективный на некоторых машинах БД и более простой для чтения и кодирования.

from django.db.models import Q

start_date = datetime.date(2005, 1, 1)
end_date = datetime.date(2005, 3, 31)
orders = Order.objects.filter(drop_off__gte=start_date, pick_up__lte=end_date)
# Or maybe better
orders = Order.objects.filter(Q(drop_off__gte=start_date), Q(pick_up__lte=end_date))
1 голос
/ 27 марта 2018

Можете ли вы попробовать это:

order = Order.objects.filter(pick_up**__date__**lte=pickup).filter(drop_off**__date__**gte=dropoff)

https://docs.djangoproject.com/fr/2.0/ref/models/querysets/#date

...