Как показать ссылку на скачивание вложенного файла в FileField в Django Admin? - PullRequest
11 голосов
/ 10 ноября 2011

У меня есть 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 ]

22 голосов
/ 14 ноября 2011

Если у вас есть модель "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, ...]
2 голосов
/ 07 января 2017

Вы можете просто сделать это, изменив 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)
1 голос
/ 31 мая 2018

ПРИМЕЧАНИЕ. Это решение подходит только для разработки.

Другое решение - просто добавить в файл urls.py следующее:

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


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

Это позволит использовать ссылку по умолчанию, указанную на странице администратора /change/, для предоставления файла для загрузки.

Документы здесь .

Информацию о том, как обслуживать эти файлы в производстве, см. В документах здесь .

...