【问题标题】:Django ORM format date and check if less or equal toDjango ORM格式日期并检查是否小于或等于
【发布时间】:2013-08-11 01:11:02
【问题描述】:

我正在使用 Django 1.5。我创建了一个通用函数来使用 ORM 从数据库中获取数据 目前我正在将字典传递给这个函数来过滤数据。请看下面的代码

objTable.objects.values(*listArg).filter(**dictFilter)

这工作正常。现在我在其中一个表中有一个日期时间字段。我需要将此与日期进行比较,因此我需要如下查询

where DATE(start_date)<= '2013-08-08'

目前要检查日期是否小于或等于我将通过字典,如

{'start_date__lte':datetime.date.today()}

由于 'start_date' 是一个日期时间字段,它的存储值类似于 '2013-08-07 00:00:00' 我如何格式化该字段然后使用小于或等于?

【问题讨论】:

  • 你想从start_datelte,'2013-08-08`生成{'start_date__lte':'2013-08-08'}吗?
  • 是的 'start_date' 是一个日期时间字段,它的存储值类似于 '2013-08-07 00:00:00' 。我需要将此与 datetime.date.today() 进行比较,例如 {'start_date__lte':datetime.date.today()} 但它似乎不起作用
  • 你应该接受答案。

标签: python django django-orm


【解决方案1】:

不要使用像 '2013-08-08' 这样的字符串,而是使用 python 日期对象,您可以将字符串转换为日期,例如

import datetime

{'start_date__lte': datetime.datetime.strptime('2013-08-08', '%Y-%m-%d').date()}

【讨论】:

  • 谢谢。 Acutaly 我正在使用 datetime.date.today() 而不是 string.I 已按问题更新。对困惑感到抱歉。我的问题是 start_date 是一个日期时间字段,因此值存储为 2013-08-07 00:00:00 。所以我相信它没有与 datetime.date.today() 进行比较。
【解决方案2】:

使用datetime.combinedate对象生成datetime

{'start_date__lte': datetime.datetime.combine(datetime.date.today(), datetime.time())}

【讨论】:

    【解决方案3】:

    我相信您可以简单地做到这一点。如果您想实时与今天进行比较。

    import datetime
    {'start_date__lte':datetime.datetime.now()}
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-12-26
      • 2012-02-24
      • 2016-09-25
      • 2015-03-11
      • 1970-01-01
      • 2012-03-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多