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

Django日期筛选不更新求助:ListView每日数据未自动刷新

解决Django ListView日期筛选无法自动更新的问题

嘿,这个问题我之前也碰到过!问题出在你定义的类级queryset上——Django在服务器启动的时候就会执行这个查询并缓存结果,之后不管过多少天,所有请求都会复用这个初始的查询集,所以日期筛选自然不会跟着每天的日期变化。

要搞定这个问题,你只需要在List_book视图里重写get_queryset()方法就行。这个方法会在每次请求时都被调用,这样就能保证每次都基于当前的日期重新筛选数据。

修改后的views.py代码如下:

from django.utils import timezone
from django.views.generic import ListView
from django.contrib.auth.decorators import login_required
from django.utils.decorators import method_decorator
from .models import Table_book

class List_book(ListView):
    model = Table_book
    template_name = 'list_today.html'

    # 可选:把登录验证移到视图内部,写法更清晰
    @method_decorator(login_required(login_url='/login/'))
    def dispatch(self, *args, **kwargs):
        return super().dispatch(*args, **kwargs)

    def get_queryset(self):
        # 每次请求时获取当前时区的本地日期,避免时区偏差
        today = timezone.localdate()
        # 重新执行筛选和排序逻辑
        return Table_book.objects.filter(date=today).order_by('date', 'time')

顺便提一句:如果你习惯原来在urls.py里的登录验证写法,也可以保留,不影响核心的日期筛选修复。另外用timezone.localdate()比直接取timezone.now().date()更稳妥,它会严格遵循你项目的时区设置,避免出现日期显示偏差的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 03:07:59