如何在Django通用视图中正确验证用户输入

问题描述

在我的Django应用中,我试图验证用户输入的表单字段值。我正在尝试在Django通用UpdateView中进行验证(正如我将在下面解释的那样)。现有字段存储交易凭证的各种状态。 状态的更改会在更新时发生(通过用户手动输入状态代码,或根据交易的特定阶段或类似情况-此处不重要)。

重要的是,在save上,文档的状态需要更改。由于状态很多,因此每个状态都有一个数值。无论在何处手动输入状态,都需要检查当前状态值是否小于。如果不是,则用户应该收到一条错误消息

我的views.py看起来像这样:

class ProdDocView(UpdateView,...):
    template_name = ...
    model = ProdLine
    form_class = ProdLineForm
    ...

    def form_valid(self,form):
        tmp_status = ProdLine.objects.get(prod_doc_id=self.object.pk).prod_doc_status
        new_status_entered = form.cleaned_data['prod_doc_status']

        if tmp_status == new_status_entered:    # This is just to check error capture
            # raise ValidationError('Wrong status code entered!!')
            return super(ProdDocView,self).form_invalid(form)
        else:
            form.instance.approved_by = self.request.user.   # This is to save user field on successful save
        return super().form_valid(form)

现在所发生的是,发生了错误捕获-即,如果先前的状态与输入的状态匹配,则保存失败。 但没有显示错误消息。如果状态为不相等,则文档成功保存。

如您所见,raise ValidationError('Wrong status code entered!!')代码行已被注释掉,因为否则表单将失败并且错误将在浏览器中显示(带有错误消息)。

我的问题是:

如何向前端用户显示错误

解决方法

为了结束这个问题,我在上面复制我的评论:

我只需要添加以下内容:

form.add_error('prod_doc_status','Wrong status code entered!!')

有了这个,错误信息就会显示在字段上。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...