2013-06-25 182 views
0

如何隱藏django中的複選框ClearableFileInput。 我有一個表格,我該如何隱藏複選框,以便如果你想改變你必須上傳一個新的,因爲它是一個必填字段。隱藏Django ClearableFileInput複選框

+0

字段是*必填*還是不爲空?向我們展示一些代碼。 –

+0

是其必填字段 – user1940979

+0

爲什麼不使用簡單的'FileInput'? –

回答

1

如果表單使用的ImageField然後使用的FileInput小部件,而不是ClearableFileInput

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

OK,你可以使用的FileInput,但你要隱藏複選框和「目前:path_to_file「都是。

一個解決方案來隱藏正好複選框是繼承ClearableFileInput部件,這種方式:

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

你會產生這樣的結果:

#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) 

現在你可以在表單中使用這個小工具:

result

參考:widgets.py from django repository