2014-02-28 78 views
11

我想过滤在用户以下列格式输入的日期BaseDatatableView中设置的查询:mm/dd/yyyy。所以start_date的格式是这样的,并且会用strptime转换为日期时间,见下文。Django过滤日期时间基于仅日期

我想将它与db中的日期datetimefield进行比较,但我想完全匹配月,日,年,无视时间。这就是我所没有的。

class AppointmentListJson(LoginRequiredMixin, BaseDatatableView): 
      .... 
    start_date = params.get('start_date', '') 
    if start_date: 
     qs = qs.filter(start_date__contains=datetime.strptime(
      start_date, DATE_FORMAT)) 

    return qs 

由于

回答

26

一种选择(打破日期在过滤器中向下):

start_date = datetime.strptime(start_date, DATE_FORMAT) 
qs = qs.filter(
    start_date__year=start_date.year, 
    start_date__month=start_date.month, 
    start_date__day=start_date.day 
) 

另一种选择(设置最小/最大时间,日期和使用范围):

from datetime import datetime 
start_date = datetime.strptime(start_date, DATE_FORMAT) 
start_date_range = (
    # The start_date with the minimum possible time 
    datetime.combine(start_date, datetime.min.time()), 
    # The start_date with the maximum possible time 
    datetime.combine(start_date, datetime.max.time()) 
) 
qs = qs.filter(start_date__range=start_date_range) 
+0

谢谢,作品完美。 –

+3

@JoeLones太好了!你介意[接受我的答案](http://meta.stackoverflow.com/help/someone-answers)? –

+0

我的不好,再次感谢。 –