Django:更改管理文件字段输出?
我制作了一个模型,其中的文件上载到自定义路径(不在MEDIA_根目录下)。所以它是一种类似受保护的文件。 现在我需要更改它在管理细节中的表示。它显示了相对于媒体URL的路径。我需要改变这一点,向生成正确URL的应用程序视图显示URLDjango:更改管理文件字段输出?,django,django-forms,django-admin,django-widget,Django,Django Forms,Django Admin,Django Widget,我制作了一个模型,其中的文件上载到自定义路径(不在MEDIA_根目录下)。所以它是一种类似受保护的文件。 现在我需要更改它在管理细节中的表示。它显示了相对于媒体URL的路径。我需要改变这一点,向生成正确URL的应用程序视图显示URL 那么,显示链接的最佳方式是什么,并且只能在admin的对象详细信息中显示?以下是我的做法: 型号.py class SecureFile(models.Model): upload_storage = FileSystemStorage( l
那么,显示链接的最佳方式是什么,并且只能在admin的对象详细信息中显示?以下是我的做法: 型号.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)
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))
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
widgets.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)
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))
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