You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django时区异常:本地正常但PythonAnywhere生产环境显示昨日销售数据

解决PythonAnywhere上Django ListView持续显示前一天销售数据的问题

这个问题我之前也碰到过,核心原因是类属性queryset在服务器启动时就被一次性计算并缓存了,之后不会随着请求重新生成。你的代码里timezone.now()只在PythonAnywhere启动(或reload)时执行一次,之后不管过了多少天,都会一直用那个旧日期来过滤数据,这就是为什么只有reload才能临时解决的原因。

正确的解决方案:改用get_queryset()方法

把类属性queryset替换成动态的get_queryset()方法,这样每次请求进来都会重新计算当前日期,就不会有缓存旧日期的问题了:

from django.utils import timezone
from django.views.generic.list import ListView
from .models import Venta  # 确保导入你的模型

class VentaToday(ListView):
    template_name = 'venta/venta_today.html'

    def get_queryset(self):
        # 每次请求都会重新获取当前日期
        today = timezone.now().date()
        return Venta.objects.filter(fecha=today).order_by('-id')

额外的注意事项

  • 如果你的Venta模型中fecha字段是DateTimeField而不是DateField,记得用fecha__date=today来过滤,这样才能匹配当天所有时间点的记录:
    return Venta.objects.filter(fecha__date=today).order_by('-id')
    
  • 再次确认你的Django时区配置:在settings.py里确保TIME_ZONE设置正确(比如TIME_ZONE = 'America/Argentina/Buenos_Aires',根据你的实际时区调整),并且USE_TZ = True,这样timezone.now()才会使用服务器配置的时区。

这样修改后,不需要手动reload服务器,每次访问页面都会自动获取当天的销售数据了。

内容的提问来源于stack exchange,提问作者Piero Pajares

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 03:34:36