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
相关产品推荐
相关产品推荐

