2013-01-15 22 views
18

我看了下面的SO問題,但沒有運氣。我不知道,也許我不明白答案。如何不渲染django圖像字段並清除內容?

1)How to remove the 「Currently」 tag and link of a FileInput widget in Django?

2)Django ModelForm ImageField

我的形式:

class SettingsForm(forms.ModelForm): 
    company_logo = forms.ImageField(label=_('Company Logo'),required=False, error_messages = {'invalid':_("Image files only")}) 
    class Meta: 
     model = Settings 
     fields = ("company_logo") 
    .... 

我的模型:

class Settings(models.Model): 
    strg=CustomFileSystemStorage(strict_name='images/company_logo.png',save_format='PNG') 
    company_logo=models.ImageField(upload_to='images',blank=True,null=True,storage=strg) 
    ..... 

渲染後:

imagefield

我從第一個環節看,該models.ImageField繼承FileInput,並增加了額外的東西,但我不明白如何克服呢?

在此先感謝。

回答

22

解決的辦法是:

class SettingsForm(forms.ModelForm): 
    company_logo = forms.ImageField(label=_('Company Logo'),required=False, error_messages = {'invalid':_("Image files only")}, widget=forms.FileInput) 
    class Meta: 
     model = Settings 
     fields = ("company_logo") 
    .... 

我添加小部件forms.FileInput,爲了告訴ImageField的使用基本場,而不是一個從FileInput繼承。

7

您可以通過指定它在初始化改變用於渲染表單字段的小部件:

class SettingsForm(forms.ModelForm): 
    company_logo = forms.ImageField(label=_('Company Logo'),required=False, \ 
            error_messages ={'invalid':_("Image files only")},\ 
            widget=FileInput) 

widget的見the docs

+0

感謝您的回答MOTER,不錯定時嗯:d – mtndesign

+0

@mtndesign耶,像20秒開;) – XORcist

9

@mtndesign,您可能還需要一個「刪除」選項,您可以將它放在模板中的任意位置。

class MyForm(forms.ModelForm): 
    photo = forms.ImageField(required=False, widget=forms.FileInput) 
    remove_photo = forms.BooleanField(required=False) 

    ... 

    def save(self, commit=True): 
     instance = super(MyForm, self).save(commit=False) 
     if self.cleaned_data.get('remove_photo'): 
      try: 
       os.unlink(instance.photo.path) 
      except OSError: 
       pass 
      instance.photo = None 
     if commit: 
      instance.save() 
     return instance 
+0

噢,感謝小費@ S29) – mtndesign