【问题标题】:Django filter datetime base on date onlyDjango 仅基于日期过滤日期时间
【发布时间】:2014-03-31 21:05:38
【问题描述】:

我正在尝试过滤 BaseDatatableView 中用户以以下格式输入的日期的查询集:mm/dd/yyyy。所以 start_date 就是这种格式,并且会使用 strptime 转换为日期时间,见下文。

我想将它与数据库中的确切日期日期时间字段进行比较,但我想完全匹配月、日、年,而不考虑时间。这就是我所拥有的,所以它不起作用。

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

谢谢

【问题讨论】:

    标签: database django datetime django-queryset


    【解决方案1】:

    最佳选择(Django 1.9+ . - For datetime fields, casts the value as date。允许链接其他字段查找。采用日期值。)

    # Assumes the start_date variable is a datetime.date() instance or
    # a value such as '2019-07-11'.
    qs.filter(start_date__date=start_date)
    
    # Note that you can also "chain" this result
    qs.filter(start_date__date__lte=start_date)
    

    Django

    一个选项(在过滤器中分解日期):

    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)
    

    【讨论】:

    猜你喜欢
    • 2022-08-22
    • 2018-12-02
    • 2018-01-25
    • 1970-01-01
    • 1970-01-01
    • 2015-04-10
    • 2020-03-13
    • 2022-01-23
    • 2023-03-23
    相关资源
    最近更新 更多