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?
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, ...]
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With