关于python:Admin FileField当前url不正确

Admin FileField current url incorrect

在django管理中,无论我在哪里有一个文件字段,编辑页面上都有一个"当前"框,其中有一个指向当前文件的超链接。但是,此链接会附加到当前页面URL,因此会导致404,因为没有这样的页面,例如:http://127.0.0.1:8000/admin/Tank/asset/17/media/datasheet/13/09/05/copyright.html/。作为参考,文件的正确URL是:江户十一〔一〕号

是否有任何方法可以在默认管理布局中修复此问题?它会影响我数据库中的每个文件字段,在我看来就像一个bug。我用错了吗?


设置.py

添加行:

1
2
import os
BASE_DIR = os.path.realpath(os.path.dirname(__file__))

更换管路:

1
2
MEDIA_ROOT = ''
MEDIA_URL = ''

具有

1
2
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR,os.pardir,'media')

这将设置项目以呈现文件夹/项目目录/媒体中的媒体内容/

网址.py

同时添加行:

1
import settings

在URL模式中添加以下行:

1
url(r'^media/(?P<path>.*)$', 'django.views.static.serve',{'document_root': settings.MEDIA_ROOT, 'show_indexes': False}),

型号.py

在模型内部添加以下行:

1
File = models.FileField('File',upload_to='./')

在模型中定义方法

1
2
3
4
5
6
7
def fileLink(self):
    if self.File:
        return '' + 'NameOfFileGoesHere' + ''
    else:
        return ''
fileLink.allow_tags = True
fileLink.short_description ="File Link"

。行政副总裁

使用字段fileLink作为只读字段,也可以将其添加到list_display中。

1
2
3
class FileAdmin(admin.ModelAdmin):
    list_display = ['fileLink']
    readonly_fields = ['fileLink']

这个问题的答案已经被这个答案完全覆盖了。不过,简而言之,问题是您可能没有在settings.py和urls.py中设置媒体根目录和媒体,所以您没有设置媒体文件夹。

有关如何做这些事情的详细信息,请查看Akseli Palen令人难以置信的精彩回答。