Django: изменить вывод администратора FileField?

Я сделал модель с файлом, который загружен по произвольному пути (не в MEDIA_ROOT). Так что это что-то вроде защищенного файла. Теперь мне нужно изменить его представление в деталях администратора. Он показывает путь относительно MEDIA_URL. Мне нужно изменить это, чтобы показать URL-адрес представления приложения, которое генерирует правильный URL-адрес.

Итак, как лучше всего отображать ссылку и только в деталях объектов в админке?


person tunarob    schedule 22.10.2013    source источник


Ответы (1)


Вот как я это сделал:

models.py

class SecureFile(models.Model):
    upload_storage = FileSystemStorage(
        location=settings.ABS_DIR('secure_file/files/'))

    secure_file = models.FileField(verbose_name=_(u'file'),
                                   upload_to='images', storage=upload_storage)

widgets.py

from django import forms
from django.utils.translation import ugettext_lazy as _
from django.core.urlresolvers import reverse
from django.utils.safestring import mark_safe


class AdminFileWidget(forms.FileInput):
    """A FileField Widget that shows secure file link"""
    def __init__(self, attrs={}):
        super(AdminFileWidget, self).__init__(attrs)

    def render(self, name, value, attrs=None):
        output = []
        if value and hasattr(value, "url"):
            url = reverse('secure_file:get_secure_file',
                          args=(value.instance.slug, ))
            out = u'<a href="{}">{}</a><br />{} '
            output.append(out.format(url, _(u'Download'), _(u'Change:')))
        output.append(super(AdminFileWidget, self).render(name, value, attrs))
        return mark_safe(u''.join(output))

admin.py

class SecureFileAdminForm(forms.ModelForm):
    def __init__(self, *args, **kwargs):
        super(SecureFileAdminForm, self).__init__(*args, **kwargs)
        self.fields['secure_file'].widget = AdminFileWidget()

    class Meta:
        model = SecureFile


class SecureFileAdmin(admin.ModelAdmin):
    form = SecureFileAdminForm
person tunarob    schedule 24.10.2013