如何在Django-filer后台管理面板按下载日期排序文件?
Django-filer后台按最近下载日期排序实现方案
可以实现,但Django-filer官方没有提供现成配置项,需要通过自定义扩展来完成,具体步骤如下:
添加下载日期跟踪字段
由于Django-filer的File模型默认没有下载日期字段,我们通过关联模型来扩展,避免直接修改第三方库代码:# 你的app/models.py from django.db import models from filer.models import File class FileDownloadTracking(models.Model): file = models.OneToOneField(File, on_delete=models.CASCADE, related_name='download_tracking') last_downloaded = models.DateTimeField(null=True, blank=True) class Meta: verbose_name = "文件下载跟踪" verbose_name_plural = "文件下载跟踪"重写下载视图更新时间
覆盖Django-filer的默认下载视图,在用户下载文件时更新last_downloaded字段:# 你的app/views.py from django.utils import timezone from filer.views import download as filer_download from filer.models import File from .models import FileDownloadTracking def custom_file_download(request, file_id): # 先执行原下载逻辑 response = filer_download(request, file_id) # 更新最后下载时间 try: file = File.objects.get(id=file_id) tracking, created = FileDownloadTracking.objects.get_or_create(file=file) tracking.last_downloaded = timezone.now() tracking.save() except File.DoesNotExist: pass return response在项目
urls.py中覆盖原下载路由(需放在filer路由之前):from django.urls import path from .views import custom_file_download urlpatterns = [ path('filer/download/<int:file_id>/', custom_file_download, name='filer_download'), # 其他路由... ]自定义后台管理类修改排序规则
重写FileAdmin类,将默认排序改为按最后下载时间降序:# 你的app/admin.py from django.contrib import admin from filer.admin.fileadmin import FileAdmin from filer.models import File class CustomFileAdmin(FileAdmin): # 优先按最后下载时间倒序,无记录则按添加时间倒序 ordering = ('-download_tracking__last_downloaded', '-date_added',) # 可选:在列表中显示最后下载时间列 list_display = FileAdmin.list_display + ('last_downloaded',) def last_downloaded(self, obj): return obj.download_tracking.last_downloaded if hasattr(obj, 'download_tracking') else None last_downloaded.short_description = '最后下载时间' # 替换原FileAdmin admin.site.unregister(File) admin.site.register(File, CustomFileAdmin)执行数据迁移
运行命令创建跟踪表:python manage.py makemigrations python manage.py migrate
完成以上配置后,Django-filer后台的文件列表会自动将最近下载的文件排在顶部,无下载记录的文件则保持原有添加时间排序。
内容的提问来源于stack exchange,提问作者Snorki
相关产品推荐
相关产品推荐

