在Django中经过Javascript验证后发送到Python视图

Post to Python view after Javascript validation in Django

本文关键字:Python 视图 验证 Django 经过 Javascript      更新时间:2023-09-26

我有一个模板,它有一个带有两个输入框的表单。问题是,我需要确保两个框中只有一个有填充值。也就是说,应该有一个文本框为空。由于Django不提供这种OR机制,我在模板中通过Javascript检查:

function validateData() {
    if ($("#email").val() && $("#cellno").val()){
        alert("Please Enter either E-Mail Address or Cell Number");
    } else {
        alert("Form submitted successfully");
        // redirect to view_2
    }
}

问题是我想把数据从文本框发送到view_2。如何发送文本框的值并执行验证?如果没有JS验证,我可以简单地将url添加到表单操作中。

我不知道你说的'Django不提供这种机制'是什么意思。如果你在视图中使用Django表单,你可以编写一个简洁的方法来验证相互依赖的字段。

class MyForm(forms.Form):
    email = forms.EmailField(required=False)
    cell = forms.CharField(required=False, max_length=20)
    def clean(self):
        cleaned_data = super(MyForm, self).clean()
        if cleaned_data.get('email') and cleaned_data.get('cell'):
            raise forms.ValidationError("Please select either E-mail address or cell number, but not both")
        return cleaned_data

我认为您应该将函数附加到submit事件,并在验证失败时防止提交。

也许像这样:

$("form").submit(function(event) {
    if ($("#email").val() && $("#cellno").val()){
        alert("Please Enter either E-Mail Address or Cell Number");
        event.preventDefault(); // this prevents the submitting.
    } else {
        alert("Form submitted successfully");
    }
});