我试图过滤一个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))

其他回答

你可以根据日期进行过滤,因为日期格式与django的日期格式相同。默认格式为“ISO YYYY-MM-DD”

target_date = "2009-08-22"
qs = MyObject.objects.filter(datetime_attr__date=target_date)

现在Django在开发版本中有__date queryset过滤器来根据日期查询datetime对象。因此,它将很快在1.9中可用。

YourModel.objects.filter(datetime_published__year='2008', 
                         datetime_published__month='03', 
                         datetime_published__day='27')

//在注释后编辑

YourModel.objects.filter(datetime_published=datetime(2008, 03, 27))

不工作,因为它创建了一个时间值设置为0的datetime对象,因此数据库中的时间不匹配。

这样的查找在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和日期太难了”了解更多细节。

从Django 1.9开始,这样做的方法是在datetime对象上使用__date。

例如: MyObject.objects.filter (datetime_attr__date = datetime.date(22) 2009年,8日)