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

其他回答

您可以在某些日期范围之间进行筛选

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 1.9开始,这样做的方法是在datetime对象上使用__date。

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

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

Model.objects.filter(datetime__year=2011, datetime__month=2, datetime__day=30)

你可以这样做

MyObject.objects.filter(datetime_field__date=datetime.date(2009,8,22))

或者如果你想在两个日期之间过滤

MyObject.objects.filter(
    datetime_field__date__range=(datetime.date(2009,8,22), datetime.date(2009,9,22))
)