How to show download link for attached file in FileField in Django Admin?

浪尽此生 提交于 2019-11-30 08:53:32

If you have a model "Case" for example, you could add a method to your class which "creates" the link to the uploaded file :

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

then, in your admin.py

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

you can simply do this by changing 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)

NOTE: This solution is only appropriate for development use.

Another solution is to simply add the following to your urls.py file:

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


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

This will allow the default link provided on the admin /change/ page to serve the file for download.

Docs here.

For information on how to serve these files in production see docs here.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!