如何在Django视图中按日期过滤,排除return_by早于今日的过期数据
实现逻辑
你只需要在查询Dibbs_Fields数据集时,搭配Django ORM的字段查找运算符和当前日期做筛选即可,实现步骤如下:
- 首先导入依赖
from django.utils import timezone from .models import Dibbs_Fields
- 函数视图(FBV)实现示例
def dibbs_valid_list(request): # 自动适配项目时区获取当前日期 current_date = timezone.now().date() # 筛选return_by晚于/等于当前日期的未过期数据 valid_data = Dibbs_Fields.objects.filter(return_by__gte=current_date) # 传递数据到模板渲染 return render(request, "your_template.html", {"dibbs_data": valid_data})
- 类视图(CBV,以ListView为例)实现示例
from django.views.generic import ListView class DibbsValidListView(ListView): model = Dibbs_Fields template_name = "your_template.html" context_object_name = "dibbs_data" def get_queryset(self): current_date = timezone.now().date() # 重写查询集,过滤掉已过期数据 return super().get_queryset().filter(return_by__gte=current_date)
补充说明
- 上述代码中
__gte是Django ORM内置的大于等于查询运算符,符合return_by >= 当前日期的条件,会保留当天到期的记录 - 如果你需要将当天到期的记录也判定为过期不展示,将
__gte替换为__gt(大于运算符)即可
内容的提问来源于stack exchange,提问作者Rikky Bhai
相关产品推荐
相关产品推荐

