【问题标题】:django date filter gte and ltedjango 日期过滤器 gte 和 lte
【发布时间】:2011-07-11 20:17:54
【问题描述】:

我需要在一组参数中查找数据 我正在构建一个小型预订系统,让用户可以查看哪些车辆可供他们的小型野生动物园旅行预订。

系统有客户之前输入或之前进行的预订。

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

关于如何做到这一点的任何建议? 还是我应该寻找另一种运行此查询的方法?

【问题讨论】:

  • 您是否要在取件和送件之间退回预订?如果是这样,它不应该是 Order.objects.filter(pick_up__gte=pickup, drop_off__lte=dropoff) 例如任何订单介于或等于 2011-03-09 和 2011-03-14 之间吗?还是我误解了要求?
  • 好吧,如果我,客户,想要预订一辆车,我的日期是 2011 年 3 月 9 日,作为取车,2011 年 3 月 14 日,作为下车,并且另一个预订已经开始日期为 2011 年 3 月 1 日的系统,作为取件,2011 年 3 月 15 日,作为下车,我希望系统告诉我这个时间段已被占用。现在更有意义了吗?
  • 我总是建议使用表单来清理输入。

标签: django django-views django-filters


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

    你可以试试这个吗:

    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

    【讨论】:

    • 最好将信息直接包含在答案和链接中,以便在链接消失时答案仍然有用。
    • @Nick 如果链接消失,可能是因为它不再受支持。在这种情况下,我认为这不是问题。
    猜你喜欢
    • 1970-01-01
    • 2018-02-21
    • 2021-09-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-07
    相关资源
    最近更新 更多