Django仅根据日期过滤日期时间

时间:2014-02-28 03:06:52

标签: database django datetime django-queryset

我正在尝试按照以下格式在用户输入的日期过滤BaseDatatableView中的查询集:mm / dd / yyyy。所以start_date采用这种格式,并将转换为带有strptime的日期时间,见下文。

我想将它与数据库中的日期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

由于

1 个答案:

答案 0 :(得分:30)

一个选项(在过滤器中打破日期):

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)