【问题标题】:How to not render django image field currently and clear stuff?当前如何不渲染 django 图像字段并清除内容?
【发布时间】:2013-01-15 11:39:57
【问题描述】:

我查看了以下 SO 问题,但没有运气。我不知道,也许我没看懂答案。

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

渲染后:

我从第一个链接中看到,models.ImageField 继承了 FileInput 并添加了额外的东西,但我不明白如何克服这个问题?

提前致谢。

【问题讨论】:

    标签: django


    【解决方案1】:

    解决办法是:

    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 的那个。

    【讨论】:

    • 我在使用 FileField 时遇到了同样的问题。 widget=forms.FileInput 也成功了!例如:图像 = forms.FileField(widget=forms.FileInput)
    【解决方案2】:

    @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
    

    【讨论】:

      【解决方案3】:

      您可以通过在初始化时指定它来更改用于呈现表单字段的小部件:

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

      有关小部件,请参阅 the docs

      【讨论】:

      • @mtndesign 是的,间隔 20 秒 ;)
      猜你喜欢
      • 1970-01-01
      • 2014-11-16
      • 1970-01-01
      • 1970-01-01
      • 2021-03-31
      • 2020-11-05
      • 2019-08-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多