django日期过滤器gte和lte

时间:2011-03-09 11:44:50

标签: django django-views django-filters

我需要在一组参数中找到数据 我正在建立一个小型预订系统,让用户可以看到哪些车辆可以预订他们的小旅行团。

系统预先输入或由客户提前预订。

如果预订的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))

有关如何执行此操作的任何建议? 或者我应该考虑另一种运行此查询的方法吗?

2 个答案:

答案 0 :(得分:19)

当你将原始字符串传递给查询集的格式不正确时,尝试将字符串转换为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))

答案 1 :(得分:1)

你可以试试这个:

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

相关问题