我有一个来自模型的表单,必须根据一个下拉列表填充字段,但是我想有一种方法可以根据所选的字段来覆盖表单的要求。
答案 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);
}
});
通过这种方式,您可以从模板中设置必填项,并且验证将在客户端进行,如果未填写字段,则服务器将不会返回任何错误。