Django-如何覆盖表单字段上的必填项?

时间:2018-10-22 14:01:18

标签: django django-forms

我有一个来自模型的表单,必须根据一个下拉列表填充字段,但是我想有一种方法可以根据所选的字段来覆盖表单的要求。

1 个答案:

答案 0 :(得分:0)

我不太确定为什么要覆盖必需项,我建议您将全部设置为required = False,然后使用jQuery动态设置html模板上的必需项。

类似的东西:

//forms.py
   class SomeModelForm(forms.form):
        field1 = forms.CharField(required=False)
        field2 = forms.CharField(required=False)
        field3 = forms.CharField(required=False)

在您的模板上

//HTML Template

<select id=“select1” required>
    <option value=“1”>Require Field 1</option>
    <option value=“1”>Require Field 2 and 3</option>
</select>

<input id="{{form.field1.id_for_label}}" type="text" class="change_required">
<input id="{{form.field2.id_for_label}}" type="text" class="change_required">
<input id="{{form.field3.id_for_label}}" type="text" class="change_required">

现在在同一模板中,执行jQuery,类似:

//HTML Template
$(“#select1”).on('change', function(){
    var fields = document.getElementsByClassName('change_required');

    for(i=0; i < fields.length; i++){
        //This changes all the fields to required=false, works as a reset
        fields[I].required = false;
    }

    var select_answer = $( "#select option:selected" ).text();

    if(select_answer == “Require Field 1”){
        $("#{{form.field1.id_for_label}}").prop('required',true);
    }
    else{
        $("#{{form.field2.id_for_label}}").prop('required',true);
        $("#{{form.field3.id_for_label}}").prop('required',true);
    }
});

通过这种方式,您可以从模板中设置必填项,并且验证将在客户端进行,如果未填写字段,则服务器将不会返回任何错误。