如何在Django Admin面板实现逾期15天未归还借阅记录过滤?
在Django Admin中实现逾期未归还借阅记录的筛选逻辑
要在Django Admin面板中实现你需要的逾期筛选逻辑,最直接的方式是自定义Admin筛选器,具体步骤如下:
1. 导入必要模块
在你的admin.py文件开头,导入所需的模块:
from django.contrib import admin from django.utils import timezone from datetime import timedelta from .models import Borrowing # 替换为你的Borrowing模型路径
2. 创建自定义筛选器类
继承admin.SimpleListFilter,实现筛选逻辑和显示选项:
class LateBorrowingFilter(admin.SimpleListFilter): # 筛选器在Admin侧边栏显示的标题 title = '逾期状态' # 用于URL参数的标识名 parameter_name = 'is_late' def lookups(self, request, model_admin): # 返回筛选选项,格式为(参数值, 显示文本) return ( ('late', '逾期未归还'), ('on_time', '正常借阅'), ) def queryset(self, request, queryset): # 根据选中的选项应用筛选逻辑 if self.value() == 'late': return queryset.filter( returned=False, borrow_date__lte=timezone.now().date() - timedelta(days=15) ) if self.value() == 'on_time': # 可选:添加正常借阅的筛选逻辑 return queryset.filter( returned=False, borrow_date__gt=timezone.now().date() - timedelta(days=15) ) # 默认返回全部记录 return queryset
3. 将筛选器绑定到Borrowing的Admin类
注册Borrowing模型时,把自定义筛选器加入list_filter:
@admin.register(Borrowing) class BorrowingAdmin(admin.ModelAdmin): # 根据你的模型实际字段调整显示列 list_display = ('id', 'borrower', 'borrow_date', 'returned') # 添加自定义筛选器到侧边栏 list_filter = (LateBorrowingFilter, 'returned')
说明
- 完成配置后,刷新Django Admin页面,Borrowing列表的侧边栏会出现“逾期状态”筛选器,选择“逾期未归还”即可自动筛选出符合条件的记录。
- 建议使用
timezone.now()替代原生datetime.now(),避免Django时区配置导致的日期计算偏差。
内容的提问来源于stack exchange,提问作者Abdelmasieh Baselious
相关产品推荐
相关产品推荐

