2015-03-31 54 views
1

假设我有这种模式:比较一个月的Django模型过滤器失效

class User(models.Model): 
    id = models.AutoField(primary_key=True) 
    username = models.CharField(max_length=10) 
    last_login = models.DateTimeField(null=True) 

这是在数据库中的记录之一,

id=15, 
username='yhbohh' 
last_login='2015-03-31 10:57:18' 

我想获得与去年对象的数量计数月的登录= 3。

我在外壳试过,

User.objects.filter(last_login__year=2015).count() # return 80 
User.objects.filter(last_login__month=3).count() # return 0 
User.objects.filter(last_login__day=31).count() # return 0 

能告诉我为什么在过去的2个查询返回任何记录? 我已经从其他问题和注意搜索,比有人可能会建议使用日期范围比较来解决这个问题。但我只想知道这个意外结果的根本原因。

非常感谢!

+0

您的_settings.py_中是否有'USE_TZ = True'? – soon 2015-03-31 04:25:54

+0

@soon,是的,我看到它在settings.py – Pang 2015-03-31 04:29:04

+1

该文档[说](https://docs.djangoproject.com/en/1.7/ref/models/querysets/#month),所有日期时间对象都转换为过滤前的当前时区。这可能会导致你面临的问题? – soon 2015-03-31 04:37:18

回答