我的 django 模型中有 FileField:
file = models.FileField(upload_to=FOLDER_FILES_PATH)
在用于更改此模型的 Django 管理部分中,我有此文件的完整路径(默认情况下):
Currently: /home/skyfox/Projects/fast_on_line/order_processor/orders_files/mydog2_2.jpg
如何为我的管理面板用户显示下载此文件的链接?
我的 django 模型中有 FileField:
file = models.FileField(upload_to=FOLDER_FILES_PATH)
在用于更改此模型的 Django 管理部分中,我有此文件的完整路径(默认情况下):
Currently: /home/skyfox/Projects/fast_on_line/order_processor/orders_files/mydog2_2.jpg
如何为我的管理面板用户显示下载此文件的链接?
例如,如果您有一个模型“案例”,您可以向您的类添加一个方法,该方法“创建”到上传文件的链接:
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)
注意:此解决方案仅适用于开发用途。
另一种解决方案是简单地将以下内容添加到您的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/
页面上提供的默认链接提供文件以供下载。
文档在这里。
有关如何在生产中提供这些文件的信息,请参阅此处的文档。