2014-02-28 45 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

我的不好,再次感謝。 –