2013-01-15 11 views
18

Spojrzałem na następujące pytanie WZ, ale nie miałem szczęścia. Nie wiem, może nie zrozumiałem odpowiedzi.Jak nie renderować pola obrazu Django i czyścić je?

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

2) Django ModelForm ImageField

My forma:

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") 
    .... 

My Model

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

Po renderingu:

imagefield

widzę z pierwszego linku, że models.ImageField dziedziczy FileInput i dodaje dodatkowych rzeczy, ale nie rozumiem, jak pokonać tego?

Z góry dziękuję.

Odpowiedz

22

Rozwiązaniem jest:

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") 
    .... 

dodałem widget forms.FileInput, aby powiedzieć o ImageField aby użyć pola podstawowe, a nie jeden odziedziczony FileInput.

7

Można zmienić widżet używany do renderowania pole formularza, określając go na inicjowanie:

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

Zobacz the docs dla widżetów.

+0

Dzięki za odpowiedź moter, całkiem dobry moment huh: D – mtndesign

+0

@mtndesign tak, jak 20 sekund od siebie;) – XORcist

9

@mtndesign, możesz również chcieć opcję "usunięcia", którą możesz umieścić w szablonie, gdzie chcesz.

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

Och, dzięki za cynk @ S29;) – mtndesign

Powiązane problemy