我试图过滤一个DateTimeField与日期比较。我的意思是:
MyObject.objects.filter(datetime_attr=datetime.date(2009,8,22))
我得到一个空的查询集列表作为答案,因为(我认为)我没有考虑时间,但我想要“任何时间”。
Django中有简单的方法来做这个吗?
我在datetime中设置了时间,不是00:00。
我试图过滤一个DateTimeField与日期比较。我的意思是:
MyObject.objects.filter(datetime_attr=datetime.date(2009,8,22))
我得到一个空的查询集列表作为答案,因为(我认为)我没有考虑时间,但我想要“任何时间”。
Django中有简单的方法来做这个吗?
我在datetime中设置了时间,不是00:00。
当前回答
MyObject.objects.filter(datetime_attr__date=datetime.date(2009,8,22))
其他回答
嗯. .我的解决方案是有效的:
Mymodel.objects.filter(date_time_field__startswith=datetime.datetime(1986, 7, 28))
这里有一个有趣的技术——我利用Django在MySQL上实现的startswith过程来实现仅通过日期查找datetime的结果。基本上,当Django在数据库中查找时,它必须为DATETIME MySQL存储对象做一个字符串转换,所以你可以过滤它,忽略日期的时间戳部分——这样%LIKE%只匹配日期对象,你会得到给定日期的每个时间戳。
datetime_filter = datetime(2009, 8, 22)
MyObject.objects.filter(datetime_attr__startswith=datetime_filter.date())
这将执行以下查询:
SELECT (values) FROM myapp_my_object \
WHERE myapp_my_object.datetime_attr LIKE BINARY 2009-08-22%
在这种情况下,LIKE BINARY将匹配日期的所有内容,而不管时间戳是什么。包括如下值:
+---------------------+
| datetime_attr |
+---------------------+
| 2009-08-22 11:05:08 |
+---------------------+
希望这能帮助到每个人,直到Django拿出解决方案!
这样的查找在django.views.generic中实现。Date_based如下:
{'date_time_field__range': (datetime.datetime.combine(date, datetime.time.min),
datetime.datetime.combine(date, datetime.time.max))}
因为它相当冗长,所以计划使用__date操作符改进语法。查看“#9596比较DateTimeField和日期太难了”了解更多细节。
您可以在某些日期范围之间进行筛选
2016-01-01 00:00:00 <- > 2016-04-01 23:59:59.99999. 2016-01-01 00:00:00 <- > 2016-04-01 23:59:59.99999
User.objects.filter(date_joined__gte=datetime.combine(datetime.strptime('2016-
01-01', '%Y-%d-%m'), datetime.min.time()),
date_joined__lte=datetime.combine(datetime.strptime('2016-04-01', '%Y-%d-%m'),
datetime.max.time())).count()
2016-01-01 00:00:00 <- > 2016-01-14 00:00:00. 2016-01-01 00:00:00 <- > 2016-01-14 00:00:00
User.objects.filter(date_joined__gte='2016-01-01', date_joined__lte='2016-1-14').count()
你可以根据日期进行过滤,因为日期格式与django的日期格式相同。默认格式为“ISO YYYY-MM-DD”
target_date = "2009-08-22"
qs = MyObject.objects.filter(datetime_attr__date=target_date)