You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 10:37:06