比较Django中的日期和日期时间

Jus*_*Mad 9 python django django-models

我有一个带有日期时间字段的模型:

class MyModel(models.Model):
    created = models.DateTimeField(auto_now = True)
Run Code Online (Sandbox Code Playgroud)

我想获得今天创建的所有记录.

我试过了:

MyModel.objects.all().filter(created = timezone.now())
Run Code Online (Sandbox Code Playgroud)

MyModel.objects.all().filter(created = timezone.now().date())
Run Code Online (Sandbox Code Playgroud)

但总是有空集.Django这样做的正确方法是什么?

编辑:

它看起来很奇怪,但今天创建的记录(06.04.2012 23:09:44)在数据库中有日期(2012-04-07 04:09:44).当我尝试在管理面板中编辑它时,它看起来是正确的(06.04.2012 23:09:44).Django会以某种方式处理它吗?

mkl*_*ber 13

可能有更合适的解决方案,但快速检查表明这可行:

from datetime import timedelta

start_date = timezone.now().date()
end_date = start_date + timedelta( days=1 ) 
Entry.objects.filter(created__range=(start_date, end_date))
Run Code Online (Sandbox Code Playgroud)

我假设时区是一个类似日期时间的对象.

重要的是你要存储一个精确的时间,直到毫秒,然后你将它与只有当天准确度的东西进行比较.而不是折腾小时,分钟和秒,django/python将它们默认为0.因此,如果您的记录创建于2011-4-6T06:34:14am,那么它将比较2011-4-6T:06:34:14am到2011-4-6T00:00:00,而不是2011-4-6(从创建日期)到2011-4-6(来自timezone.now().date()).有用吗?


MZA*_*MZA 8

从2015年的某个地方开始:

YourModel.objects.filter(some_datetime__date=some_date)
Run Code Online (Sandbox Code Playgroud)

即datetime字段后面的__date.

https://code.djangoproject.com/ticket/9596