Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

I have FileField in my django model:

file = models.FileField(upload_to=FOLDER_FILES_PATH)

In Django admin section for changing this model I have full path to this file (by default):

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

How can I show link for downloading this file for my admin panel users?

like image 835
SkyFox Avatar asked Nov 10 '11 13:11

SkyFox


3 Answers

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

from django.utils.html import format_html

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

    def file_link(self):
        if self.file:
            return format_html("<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, ...]
like image 54
Lapin-Blanc Avatar answered Nov 19 '22 21:11

Lapin-Blanc


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)
like image 28
Basil Jose Avatar answered Nov 19 '22 22:11

Basil Jose


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.

like image 2
user1847 Avatar answered Nov 19 '22 22:11

user1847