在查询过滤器中使用日期范围

时间:2019-10-15 10:06:29

标签: python django

我有一个HTML表单,该表单以如下格式返回两个日期:2019-10-15。 当我检查日期返回的type()时,结果为“ str”

如何在Django查询中使用此字符串?

代码:

start = request.POST['from']
end = request.POST['to']

foo = bar.objects.filter(dispatch_date = ??)

3 个答案:

答案 0 :(得分:2)

您可以使用range进行日期过滤

您可以使用parse_date这样将字符串转换为日期。

from django.utils.dateparse import parse_date
start = request.POST['from']
start_date = parse_date(start)

end = request.POST['to']
end_date = parse_date(end)


foo = bar.objects.filter(date__range=(start_date,end_date))
如果给定日期不是parse_date格式,

%Y-%m-%d函数将返回None,因此在这种情况下,您可以将日期转换为这样的日期

start = request.POST['from']
start_date = datetime.datetime.strptime(start, "%Y-%m-%d").date()

答案 1 :(得分:1)

VIEWS.PY

<TargetFrameworks>netstandard2.0;netcoreapp3.0;net461;net472</TargetFrameworks>

HTML

   def date_page(request): 
    f_date = request.GET.get("f_date")
    t_date = request.GET.get("t_date")


    date_queryset = Add.objects.filter(date__range=(f_date, t_date))
    for i in date_queryset:
        print (i.budget, i.date)

    return render (request , 'date_page.html',{'date_queryset':date_queryset})

答案 2 :(得分:0)

您必须根据“模型”将日期转换为所需格式,例如:

start = request.POST['from']
end = request.POST['to']

start_date = datetime.strptime(start, "%Y-%m-%d %H:%M:%S.%f")

end_date = datetime.strptime(end, "%Y-%m-%d %H:%M:%S.%f")

foo = bar.objects.filter(date__range=[start_date, end_date])

"%Y-%m-%d %H:%M:%S.%f是您必须根据模型,如何定义字段而更新的格式。