2011-03-09 196 views
10

我需要在一组参数中查找数据 我正在构建一个小型预订系统,它可以让用户查看哪些车辆可用于预订他们的小型safari旅行。django date filter gte and lte

该系统具有预先输入或由客户预先输入的预订。

如果预订的pickup_date = 2011-03-01dropoff_date = 2011-03-15,我跑在我的观点pickup=2011-03-09dropoff=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

您想要在取件和取件之间返回预订吗?如果是这样的话,它不应该是Order.objects.filter(pick_up__gte = pickup,drop_off__lte = dropoff),例如等于2011-03-09和2011-03-14之间的任何订单?还是我误解了要求? – JamesO 2011-03-09 12:02:08

+0

嗯,如果我是客户,正在寻找一辆车,我的日期是2011-03-09,作为取件,而2011-03-14,作为下车,另一个订票已经在系统上有一个日期2011-03-01,作为代答,2011-03-15,作为下降,我希望系统告诉我这个时间段已经完成。现在更有意义了吗? – ApPeL 2011-03-09 12:20:53

+0

我总是建议使用表单来消毒输入。 – 2017-03-04 20:47:44

回答

17

是否可能是因为您将原始字符串传递给查询集的格式不正确,请尝试将字符串转换为日期时间对象。

稍后,您可以尝试使用范围查找在某些数据库引擎上更高效,并且更易于阅读和编码。

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