隐藏Django ClearableFileInput复选框

时间:2013-06-25 09:24:21

标签: django django-forms

如何隐藏django ClearableFileInput中的复选框。 我有一个表单,我可以隐藏复选框,这样如果你想要更改,你必须上传一个新的,因为它是一个必填字段。

2 个答案:

答案 0 :(得分:1)

如果表单使用 ImageField ,则使用 FileInput 小部件而不是 ClearableFileInput

class Meta:
    widgets = {
        'field_name': forms.FileInput,
    }

答案 1 :(得分:1)

好的,你可以使用FileInput,但是你要隐藏复选框和“Currently:path_to_file”。

隐藏复选框的一个解决方案是以这种方式子类化ClearableFileInput小部件:

#widgets.py
from django.forms.widgets import FileInput
from django.utils.translation import ugettext_lazy
from django.utils.html import format_html
from django.utils.encoding import force_text
from django.utils.safestring import mark_safe


class NotClearableFileInput(FileInput):
    initial_text = ugettext_lazy('Currently')
    input_text = ugettext_lazy('Change')

    template_with_initial = '%(initial_text)s: %(initial)s <br />%(input_text)s: %(input)s'

    url_markup_template = '<a href="{0}">{1}</a>'

    def render(self, name, value, attrs=None):
        substitutions = {
            'initial_text': self.initial_text,
            'input_text': self.input_text,
        }
        template = '%(input)s'
        substitutions['input'] = super(NotClearableFileInput, self).render(name, value, attrs)

        if value and hasattr(value, "url"):
            template = self.template_with_initial
            substitutions['initial'] = format_html(self.url_markup_template,
                                               value.url,
                                               force_text(value))

        return mark_safe(template % substitutions)

现在您可以使用以下格式的小部件:

    widgets = {
        'field_name': widgets.NotClearableFileInput,
    }

你会得到这个结果:

result

参考:widgets.py from django repository