首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在clean()过程中修改Django表单字段的值

在clean()过程中修改Django表单字段的值
EN

Stack Overflow用户
提问于 2009-03-17 13:58:53
回答 4查看 22.5K关注 0票数 28

我正在向我的Django应用程序中的表单和自定义字段添加自定义验证。我希望能够在触发错误时修改字段的值。例如,如果存在错误,则应重新显示表单,其中包含已由clean()更正的字段值,并显示错误消息“数据已更正如下。再次单击保存以确认这些更改是否正确”。

我尝试过像这样在cleaned_data[]中返回修改后的数据,但不起作用。它会正确显示错误,但在重新显示表单时,不会使用更正后的HTML更新字段值。

代码语言:javascript
复制
class T34AtividadeForm(ModelForm):
    def clean(self):
        # Return cleaned html
        error,html = fix_imgs(cleaned_data.get("a34_descricao"))
        if error:
            msg = u'Data has been corrected below. Click save again to confirm if these changes are OK';
            self._errors['a34_descricao'] = ErrorList([msg])
            # This doesn't work
            cleaned_data["a34_descricao"] = html
            # This doesn't work either
            self.a34_descricao = html

    return cleaned_data

我也想对字段做同样的事情,但由于错误是由异常触发的,所以我没有机会返回更正后的值。与form clean()方法类似,错误会正确显示,但值不会更新。

代码语言:javascript
复制
class HTMLField(CharField):
    widget = HTMLTextarea

    def clean(self, value):
        value = super(HTMLField,self).clean(value)
        error,html = fix_imgs(value)
        if error:
            # This doesn't work
            self.value = html
            raise forms.ValidationError(u'Data has been corrected below. Click save again to confirm if these changes are OK.')
        return html
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2009-03-17 14:11:49

更改clean方法中的self数据以更改显示的值

票数 7
EN

Stack Overflow用户

发布于 2015-11-25 04:22:21

更新clean()中的值的方法是更新表单数据字典中的值:

代码语言:javascript
复制
self.data["a34_stuff"] = "html"

这肯定是有效的。

票数 2
EN

Stack Overflow用户

发布于 2011-07-21 18:57:44

这是我尝试过的方法,对我来说是有效的:

代码语言:javascript
复制
 inst = my_form.save(commit=False)
 if not inst.a34_stuff: # or incorrect
     inst.data["a34_stuff"] = "corrected"
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/654380

复制
相关文章

相似问题

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