Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Admin FileField current url incorrect

In the Django admin, wherever I have a FileField, there is a "currently" box on the edit page, with a hyperlink to the current file. However, this link is appended to the current page url, and therefore results in a 404 as there is no such page as, for example: http://127.0.0.1:8000/admin/Tank/asset/17/media/datasheet/13/09/05/copyright.html/
For reference, the correct url of the file is: http://127.0.0.1:8000/media/datasheet/13/09/05/copyright.html

Is there any way to fix this problem in the default admin layout? It affects every FileField in my database, and seems to me like a bug. Am I just using it wrong?

like image 915
Rowan Ingram Avatar asked Sep 05 '13 09:09

Rowan Ingram


1 Answers

settings.py

add the lines:

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

replace the lines:

MEDIA_ROOT = ''
MEDIA_URL = ''

with

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

this should setup your project to render your media content from the folder /your project directory/media/

urls.py

also add the line:

import settings

add the following line in your url patterns:

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

models.py

inside your model add the following line:

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

define the method in the model

def fileLink(self):
    if self.File:
        return '<a href="' + str(self.File.url) + '">' + 'NameOfFileGoesHere' + '</a>'
    else:
        return '<a href="''"></a>'
fileLink.allow_tags = True
fileLink.short_description = "File Link"

admin.py

use the field fileLink as a read only field, you can also add it to your list_display

eg

class FileAdmin(admin.ModelAdmin):
    list_display = ['fileLink']
    readonly_fields = ['fileLink']
like image 91
sj7 Avatar answered Oct 05 '22 13:10

sj7