Как показать ссылку на скачивание прикрепленного файла в FileField в Django Admin?
У меня есть FileField в моей модели django:
file = models.FileField(upload_to=FOLDER_FILES_PATH)
В разделе администрирования Django для изменения этой модели у меня есть полный путь к этому файлу (по умолчанию):
Currently: /home/skyfox/Projects/fast_on_line/order_processor/orders_files/mydog2_2.jpg
Как я могу показать ссылку для загрузки этого файла для пользователей моей панели администратора?
3 ответов
Если у вас есть модель "Case", например, вы можете добавить метод в свой класс, который" создает " ссылку на загруженный файл :
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, ...]
вы можете просто сделать это, изменив 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)
Примечание: это решение подходит только для разработки.
другое решение-просто добавить следующий код :
from django.conf import settings
from django.conf.urls.static import static
urlpatterns = [
...
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
Это позволит ссылку по умолчанию, предоставленную на admin /change/
страница для обслуживания файла для загрузки.
Docs здесь.
для получения информации о том, как обслуживать эти файлы в производстве см. docs здесь.