背景:在我进入这个admin列表时,我只想要展示当天的数据信息,如果需要查询其他时间的数据,则通过筛选框查看
1. 需要重写get_queryset方法,来设置默认展示的数据条件(createTime是该admin对应的model里面的一个时间字段,我需要根据该字段来筛选当天的数据)
def get_queryset(self, request):
# 获取当天日期
today_date = datetime.now().date() # - timedelta(days=1)
# 使用 TruncDate 截断日期字段
queryset = super().get_queryset(request).annotate(truncated_date=TruncDate('createTime'))
queryset = queryset.filter(truncated_date=today_date)
return queryset
2. 但是这里就有问题,就是在我是用筛选框的时候选取其他时间的数据时就会不生效,永远只能查取当天数据,所以这里还要再改一下
def get_queryset(self, request):
# 获取当天日期
today_date = datetime.now().date() # - timedelta(days=1)
# 使用 TruncDate 截断日期字段
queryset = super().get_queryset(request).annotate(truncated_date=TruncDate('createTime'))
# 获取日期范围的开始日期和结束日期
date_filter_start = request.GET.get('createTime__gte')
date_filter_end = request.GET.get('createTime__lte')
if date_filter_start and date_filter_end:
# 如果筛选框中选择了日期范围,使用该范围进行筛选
start_date = datetime.strptime(date_filter_start, "%Y-%m-%d %H:%M:%S%z").date()
end_date = datetime.strptime(date_filter_end, "%Y-%m-%d %H:%M:%S%z").date()
queryset = queryset.filter(truncated_date__range=[start_date, end_date])
else:
# 否则,使用默认条件筛选当天的项目
queryset = queryset.filter(truncated_date=today_date)
return queryset
加了判断是否是获取筛选框的数据,如果是就根据筛选时间来,不是就默认展示当天数据
over