我正在运行Django 1.4.3和Python 2.7,带有PostgreSQL数据库(9.2.2)。我有一个带有“last_view”字段的模型,该字段是用户上次查看记录的时间戳。在我的头版我想显示在最近一周内的十个查看过的项目,所以在我的ListView我试图用这个对我的查询集:Django使用timezone.now和__range打破日期范围?
startdate = timezone.now() - datetime.timedelta(days=7)
enddate = timezone.now()
urlpatterns = patterns('',
url(r'^$',
ListView.as_view(
queryset=Tag.objects.filter(last_view__range=([startdate, enddate])).order_by('-views')[:10],
context_object_name='most_viewed_list',
template_name='tags/index.html'),
name='index'),
这工作,当我第一次加载页面。如果我单击任何记录并“查看”它们,last_view属性将在数据库中更新 - 但如果我重新加载页面,则此项从“最近查看”列表(由上述查询集形成)中消失。
我认为这个问题与post有关,它似乎是timezone.now()的“enddate”在启动我的服务器进程时受到限制。所以当我在服务器运行后点击一个链接时,“当前时间”将在未来与“now()”相比并在范围之外(这就是为什么我点击的记录在页面重新加载时消失的原因)。但是,如果我改变的事情,只是现在如在上述文章中,我得到的页面加载错误:
startdate = timezone.now - datetime.timedelta(days=7)
enddate = timezone.now
不支持的操作类型为 - :“功能”和“datetime.timedelta '
所以我不能创建我的startdate变量。我可以通过将查询集从_range更改为_gte来实现此目的,但是如果现在()真的被时间戳记到服务器进程启动而不是“当前时间”,那么它似乎会随时间而中断。
queryset=Tag.objects.filter(last_view__gte=(timezone.now() - datetime.timedelta(days=7)).order_by('-views')[:10]
的Django Tutorial on testing的确显示了日期进行查询使用现在,但是他们没有说明如何从减去天现在或timedelta或日期范围内使用它...
有人可以请解释如何从实际,当前时间,即使用现在而不是现在()?我还想更好地了解现在使用()与现在使用的限制。我找不到很好的文档,因为我可以用timedelta()找到的所有示例都引用timezone.now()或datetime.now(),它可以工作(不是我想要的方式)。
谢谢!
谢谢你的清晰,简明的答复!这解决了它 - 我没有意识到,urls.py只加载一次... – user