如何在Django Admin中显示FileField中附件的下载链接?

时间:2011-11-10 13:32:00

标签: django-admin filefield

我的django模型中有FileField:

file = models.FileField(upload_to=FOLDER_FILES_PATH)

在Django管理部分中,为了更改此模型,我有这个文件的完整路径(默认情况下):

Currently: /home/skyfox/Projects/fast_on_line/order_processor/orders_files/mydog2_2.jpg 

如何为管理员面板用户显示下载此文件的链接?

3 个答案:

答案 0 :(得分:22)

例如,如果你有一个模型“案例”,你可以在你的类中添加一个方法,“创建”上传文件的链接:

class Case(models.Model)
    ...
    file = models.FileField(upload_to=FOLDER_FILES_PATH)
    ...

    def file_link(self):
        if self.file:
            return "<a href='%s'>download</a>" % (self.file.url,)
        else:
            return "No attachment"

    file_link.allow_tags = True

然后,在你的admin.py

list_display = [..., file_link, ...]

答案 1 :(得分:2)

您只需更改admin.py,

即可
from django.contrib import admin
from app.models import *

class AppAdmin(admin.ModelAdmin):
    list_display = ('author','title','file_link')
    def file_link(self, obj):
        if obj.file:
            return "<a href='%s' download>Download</a>" % (obj.file.url,)
        else:
            return "No attachment"
    file_link.allow_tags = True
    file_link.short_description = 'File Download'

admin.site.register(AppModel , AppAdmin)

答案 2 :(得分:1)

注意:此解决方案仅适用于开发用途。

另一种解决方案是将以下内容添加到urls.py文件中:

from django.conf import settings
from django.conf.urls.static import static


urlpatterns = [
    ...
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

这将允许admin /change/页面上提供的默认链接提供文件供下载。

文档here

有关如何在生产中提供这些文件的信息,请参阅文档here