Вам нужно переопределить ClearableFileInput, который используется в данный момент, чтобы изменить способ его отображения.
Ниже приведен код нового ShortNameFileInput
, который наследуется от значения по умолчанию ClearableFileInput
, для чего достаточно изменить только 19-ю строку, чтобы показать только имя файла:
from django.forms.widgets import ClearableFileInput
import os
# missing imports
from django.utils.safestring import mark_safe
from cgi import escape
from django.utils.encoding import force_unicode
class ShortNameClarableFileInput(ClearableFileInput):
def render(self, name, value, attrs=None):
substitutions = {
'initial_text': self.initial_text,
'input_text': self.input_text,
'clear_template': '',
'clear_checkbox_label': self.clear_checkbox_label,
}
template = u'%(input)s'
substitutions['input'] = super(ClearableFileInput, self).render(name, value, attrs)
if value and hasattr(value, "url"):
template = self.template_with_initial
substitutions['initial'] = (u'<a href="%s">%s</a>'
% (escape(value.url),
escape(force_unicode(os.path.basename(value.url))))) # I just changed this line
if not self.is_required:
checkbox_name = self.clear_checkbox_name(name)
checkbox_id = self.clear_checkbox_id(checkbox_name)
substitutions['clear_checkbox_name'] = conditional_escape(checkbox_name)
substitutions['clear_checkbox_id'] = conditional_escape(checkbox_id)
substitutions['clear'] = CheckboxInput().render(checkbox_name, False, attrs={'id': checkbox_id})
substitutions['clear_template'] = self.template_with_clear % substitutions
return mark_safe(template % substitutions)
Чтобы использовать его в своей форме, вам нужно вручную установить виджет, который вы хотите использовать:
class DemoVar_addform(ModelForm):
...
class Meta:
model = DemoVar_model
widgets = {
'Welcome_sound': ShortNameClarableFileInput,
}
Это должно сработать.