如何比较Django

时间:2016-06-28 06:06:36

标签: django

我已使用datetime.datetime.now()在我的模型中存储datefield,其中保存为2016-06-27 15:21:17.248951+05:30。现在,我想将datefield与前端获得的datetime值进行比较,例如Thu May 26 2016 00:00:00 GMT 0530 (IST)。 Django应该如何查询模型以比较两个日期字段?

# models.py

datefield = models.DateTimeField(blank=True,null=True)

我尝试使用Python的datefieldsplit()函数转换来自前端的remove(),以格式2016-06-27 13:25:35创建它。

但仍然没有解决方案并获得Null即使我正在比较这个(2016-06-27 13:25:35)价值的相同日期值(2016-06-27 12:36:34.898593+ 00)值,因为两个值中的日期相同。

我使用简单的Django查询检查了它,如下所示:

company_details.objects.filter(datefield=datefield).only('par1','par2',...)

2 个答案:

答案 0 :(得分:2)

比较这样的日期和时间。只要像你想要的那样给'%Y-%m-%d %H:%M:%S'这个变量。

In [1]: from datetime import datetime
In [2]: past = datetime.now()
In [3]: present = datetime.now()
In [4]: present.strftime('%Y-%m-%d %H:%M:%S') == past.strftime('%Y-%m-%d %H:%M:%S')
Out[17]: False
In [5]: present.strftime('%Y-%m-%d %H:%M') == past.strftime('%Y-%m-%d %H:%M')
Out[2]: True

如果您只想比较date这样使用。

if present.date() == past.date():
    #Do your stuff

答案 1 :(得分:1)

将日期从前端转换为2016-06-27 13:25:35等ISO格式后,您可以使用它来查询模型中的一个

Model.objects.filter(date_created__startswith=today)
Model.objects.filter(date_created__contains=today)

如果您只想过滤某个日期2016-06-27

,它也会有效
Model.objects.filter(date_created__startswith=date(2016, 6, 27))

要解析从前端获取的日期字符串,有两个选项。

如果您的日期字符串格式正确,则可以使用例如datestring.strftime('%Y-%m-%d %H:%M:%S')进行解析,以获取datetime()对象。

如果您的日期字符串不可靠,并且可能采用您无法预测的不同方式进行格式化,我建议您使用DateUtil。它附带了一个解析器,它将尝试将任何字符串转换为日期时间,例如

>>> from dateutil.parser import parse
>>> parse("Today is January 1, 2047 at 8:21:00AM", fuzzy_with_tokens=True)
(datetime.datetime(2011, 1, 1, 8, 21), (u'Today is ', u' ', u'at '))