首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Django ModelForm验证

Django ModelForm验证
EN

Stack Overflow用户
提问于 2012-10-10 03:10:15
回答 1查看 21.2K关注 0票数 9

现在正在尝试解决一个有趣的问题。

我有一个Django模型,它的image字段不是必需的,但在创建新模型实例时设置为默认值。

代码语言:javascript
复制
class Product(models.Model):
    image = models.ImageField(upload_to='/image/directory/', default='/default/image/path/', blank=True)

我还有一个基于该模型的ModelForm,它包含image字段,并且具有一些自定义验证。

代码语言:javascript
复制
class ProductForm(forms.ModelForm):
    class Meta:
        model = Product
        fields = ('image',)

    def clean_image(self):
        image = self.cleaned_data.get('image', False)
        if image:
            # validate image
        return None

问题是,在ModelForm上调用is_valid()per the docs除了触发表单验证外,还会触发模型验证,因此当用户提交没有图像的模型表单时,我的自定义表单验证代码会尝试验证默认的模型图像,而不是像它应该做的那样什么也不做。

除非表单本身具有image字段的值,否则我如何让它不执行任何操作?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-10-10 03:38:28

只是用一种非常简单的方法解决了它。在这里添加答案,以防对其他人有帮助。

The Django docs state that

绑定到模型对象的

...a模型表单实例将包含一个self.instance属性,该属性为模型表单方法提供对特定模型实例的访问权限。

因此,我并不检查ModelForm是否有映像值,而是只检查保存的实例中的映像值是否发生了变化。表单验证现在如下所示:

代码语言:javascript
复制
class ProductForm(forms.ModelForm):
    class Meta:
        model = Product
        fields = ('image',)

    def clean_image(self):
        image = self.cleaned_data.get('image', False)
        if not self.instance.image == image:
            # validate image
        return None

问题解决了!

票数 17
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12806771

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档