我试图过滤一个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。
当前回答
你可以根据日期进行过滤,因为日期格式与django的日期格式相同。默认格式为“ISO YYYY-MM-DD”
target_date = "2009-08-22"
qs = MyObject.objects.filter(datetime_attr__date=target_date)
其他回答
你可以这样做
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))
)
下面是我使用ipython的timeit函数得到的结果:
from datetime import date
today = date.today()
timeit[Model.objects.filter(date_created__year=today.year, date_created__month=today.month, date_created__day=today.day)]
1000 loops, best of 3: 652 us per loop
timeit[Model.objects.filter(date_created__gte=today)]
1000 loops, best of 3: 631 us per loop
timeit[Model.objects.filter(date_created__startswith=today)]
1000 loops, best of 3: 541 us per loop
timeit[Model.objects.filter(date_created__contains=today)]
1000 loops, best of 3: 536 us per loop
Contains似乎更快。
从Django 1.9开始,这样做的方法是在datetime对象上使用__date。
例如: MyObject.objects.filter (datetime_attr__date = datetime.date(22) 2009年,8日)
您可以在某些日期范围之间进行筛选
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()
很简单,如果你有一个datetimefield你可以使用datetime。date。today()
context['now'] = Mymodel.objects.filter(date_time_field=datetime.date.today())