Django date filter gte и lte

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

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

Если вы заказываете 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))

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

Ответ 1

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

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

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))