【问题标题】:Select between two dates with Django使用 Django 在两个日期之间进行选择
【发布时间】:2011-04-27 03:58:53
【问题描述】:

我正在寻找使用 Django 在日期之间进行选择的查询。

我知道如何使用原始 SQL 很容易地做到这一点,但是如何使用 Django ORM 来实现呢?

这是我想在查询中添加 30 天之间的日期:

start_date = datetime.datetime.now() + datetime.timedelta(-30)
context[self.varname] = self.model._default_manager.filter(
    current_issue__isnull=True
    ).live().order_by('-created_at')

【问题讨论】:

    标签: python django


    【解决方案1】:

    使用__range 运算符:

    ...filter(current_issue__isnull=True, created_at__range=(start_date, end_date))
    

    【讨论】:

    • “created_at”是模型中的任意字段还是创建记录时的数据库实际日志?
    • @Philip556677 这是模型中的任意字段。您可以将 DateField 的 auto_now_add 参数设置为 True 以便轻松使用。
    【解决方案2】:

    【讨论】:

      【解决方案3】:

      两种方法

      .filter(created_at__range=[from_date, to_date])
      

      另一种方法

      .filter(Q(created_at__gte=from_date)&Q(created_at__lte=to_date))
      
      • gte 表示大于等于
      • lte 表示小于等于

      【讨论】:

      • 第二种方法不需要Q Objects,可以写:.filter(created_at__gte=from_date, created_at__lte=to_date)
      【解决方案4】:

      如果您使用的是 DateTimeField,使用日期过滤将不包括最后一天的项目。

      您需要将值转换为日期:

      ...filter(created_at__date__range=(start_date, end_date))
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-03-12
        • 1970-01-01
        • 1970-01-01
        • 2015-06-04
        相关资源
        最近更新 更多