gpt4 book ai didi

python - Django 查询 timezone.now 和 __range 损坏的日期范围?

转载 作者:行者123 更新时间:2023-11-28 21:25:35 24 4
gpt4 key购买 nike

我正在运行 Django 1.4.3 和 Python 2.7,以及 PostgreSQL 数据库 (9.2.2)。我有一个带有“last_view”字段的模型,该字段是用户最后一次查看记录的时间戳。在我的首页上,我想显示上周内查看次数最多的十个项目,因此在我的 ListView 中,我尝试将其用于我的查询集:

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() 的“结束日期”受限于我启动服务器进程的时间。所以当我在服务器运行后点击一个链接时,“当前时间”与“现在()”相比是 future 的并且超出了范围(这就是为什么我点击的记录在页面重新加载时消失了)。但是,如果我像上面提到的那样将事情更改为现在,我会在页面加载时遇到错误:

startdate = timezone.now - datetime.timedelta(days=7)
enddate = timezone.now

- 不支持的操作数类型:'function' 和 'datetime.timedelta'

所以我无法创建开始日期变量。我可以通过将查询集从 _range 更改为 _gte 来实现这一点,但如果 now() 的时间戳确实是服务器进程启动的时间而不是“当前时间”,那么这似乎会随着时间的推移而中断。 “

queryset=Tag.objects.filter(last_view__gte=(timezone.now() - datetime.timedelta(days=7)).order_by('-views')[:10]

Django Tutorial on testing确实显示了 now 在对日期进行查询时的使用,但是它们没有显示如何从 now 中减去天数或将其与 timedelta 或日期范围一起使用...

有人可以解释一下如何从实际的当前时间获取时间差吗,即使用 now 而不是 now()?我还想更好地了解使用 now()now 的局限性。我找不到关于此的优秀文档,因为我可以找到的所有 timedelta() 示例都引用 timezone.now() 或 datetime.now(),它们有效(只是不是我想要的方式)。

谢谢!

最佳答案

子类 ListView 并覆盖 get_queryset 方法。通过计算 get_queryset 方法中的 startdateenddatetimezone.now() 将是时间已发出请求,而不是在最初加载 urls.py 时。

class TagListView(ListView):
def get_queryset(self):
startdate = timezone.now() - datetime.timedelta(days=7)
enddate = timezone.now()
return Tag.objects.filter(last_view__range=[startdate, enddate]).order_by('-views')[:10]
context_object_name='most_viewed_list'
template_name='tags/index.html'

urlpatterns = patterns('',
url(r'^$', TagListView.as_view(), name='index'),
)

关于python - Django 查询 timezone.now 和 __range 损坏的日期范围?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14076350/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com