【发布时间】:2014-03-22 01:04:58
【问题描述】:
谁能向我解释为什么以下过滤器在月和日级别不起作用?按年份过滤似乎有效,但其他两个无效。
>>> clicks.count()
36
>>> date = clicks[0].created
>>> date.month
2
>>> date.year
2014
>>> date.day
1
>>> clicks.filter(created__month=2)
[]
>>> clicks.filter(created__month=02)
[]
>>> clicks.filter(created__month='02')
[]
>>> clicks.filter(created__month='2')
[]
>>> clicks.filter(created__month=date.month)
[]
>>> clicks.filter(created__day=date.day)
[]
快速更新以证明我在创建和处理查询集之前得到了相同的行为:
>>> clicks = PreviewClick.objects.filter(created__month = 2)
>>> clicks.count()
0
>>> clicks = PreviewClick.objects.filter(created__month = 02)
>>> clicks.count()
0
>>> clicks = PreviewClick.objects.filter(created__month = '02')
>>> clicks.count()
0
>>> clicks = PreviewClick.objects.filter(created__month = '2')
>>> clicks.count()
0
这里有更多值得深思的地方:
>>> clicks = PreviewClick.objects.all()
>>> counter = 0
>>> for click in clicks:
... if click.created.month == 2:
... counter += 1
...
>>> counter
35
【问题讨论】:
-
你是如何创造点击的?
-
您确定您的点击日期为 2 月吗?我刚刚在我们的一个数据库上尝试了这个过滤器,对我来说效果很好。
-
看起来你做了
.objects.all() 并将其分配给点击,然后试图过滤它。你可能想做 .objects.filter(....) -
@user590028 在第二行中,我获取了查询集中第一项的实际“创建”值,并证明月份值实际上是二月。所以过滤器应该至少获得一条记录,对吗?
-
你能告诉我们
PreviewClick.objects.all()里面有一个2个月的对象
标签: python django datetime filtering