How to not render django image field currently and clear stuff?

前端 未结 3 1389
我寻月下人不归
我寻月下人不归 2021-02-01 05:04

I took a look at following SO question, but had no luck. I don\'t know, maybe I didn\'t understand the answers.

1) How to remove the “Currently” tag and link of a FileIn

相关标签:
3条回答
  • 2021-02-01 05:13

    You can change the widget used to render the form field by specifying it on initializing:

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

    See the docs for widgets.

    0 讨论(0)
  • 2021-02-01 05:22

    The solution is:

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

    I added the widget forms.FileInput, in order to tell the ImageField to use the basic field, not the one inherited from FileInput.

    0 讨论(0)
  • 2021-02-01 05:31

    @mtndesign, you might also want a "remove" option, which you can place wherever you like in your template.

    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 讨论(0)
提交回复
热议问题