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

Django3.2线上服务部分QuerySet不自动更新需重启,本地运行正常

问题根因

你遇到的问题核心是顶层变量的加载机制导致日期参数固定:

  • Django服务启动时会一次性加载views.py的全部顶层代码,你定义的current_local_date只会在服务启动的那一刻计算一次,后续所有请求复用的都是服务启动时生成的固定日期字符串,而非请求发生时的实际日期。
  • 第二个视图view2没有用到这个固定的顶层日期变量,每次请求都会执行全新的查询,所以数据可以正常刷新。

你之前尝试的refresh_from_db是用于刷新单个模型实例的方法,不适用于调整QuerySet的查询参数,因此无效。

修复方案

把日期计算的逻辑从views.py顶层移到视图函数内部,这样每次请求触发视图时都会重新计算当前日期,保证查询参数是最新的:

import pytz
from datetime import datetime
from django.core.serializers import serialize

# 移除原views.py顶层的utc_now、cst_now、current_local_date定义
def myFirstView(request):
    # 每次请求都重新计算当前日期
    utc_now = pytz.utc.localize(datetime.utcnow())
    cst_now = utc_now.astimezone(pytz.timezone("America/Chicago"))
    current_local_date = cst_now.strftime('%Y-%m-%d')
    
    variable2 = Calls.objects.filter(local_date = current_local_date).using('myDatabase').count()
    variable3 = serialize('json', Calls.objects.filter(local_date=current_local_date).using('myDatabase'))
    context = {'variable2':variable2, 'variable3':variable3}
    return render(request, 'myReport.html', context)

def view2(request):
   variable1 = Calls.objects.all().order_by('-time_pulled', 'time')[:15].using('myDatabase')
   context = {'variable1':variable1}
   return render(request, 'myOtherReport.html', context)
额外排查点

如果修改后仍然存在查询不刷新的问题,可排查两个方向:

  • 检查是否给myFirstView配置了视图级缓存,导致返回的是缓存的旧页面
  • 检查myDatabase对应的数据库配置是否开启了查询缓存,导致相同查询语句直接返回旧结果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 12:48:04