我在Django app中使用Form。 此表单用于设置值并再次更改它。
更改时,需要指定一个原因,但在设置时不需要。
我更改字段的显示'原因'如果值为None,则为none,但由于该字段为 if(headers) {
return this.http.get(this.baseUrl+url, {headers: headers}).map(response => {
}).catch(err=>{});
}
,因此用户无法提交表单,因为该字段未填写。
点击确认时:
此外,在编辑时,该值已预先填充,但它也会显示错误,因为“' reason'字段未填写。
点击任何地方之前:
我该怎么办才能在编辑时才需要该字段?
编辑:代码
视图
required
形式
def change_grade(request, grade_id):
grade = get_object_or_404(Grade, id=grade_id)
if(request.method=='POST'):
form = GradeForm(request.POST)
if(form.is_valid()):
#save it
if(grade.grade is None):
form = GradeForm()
else:
form = GradeForm({'grade':grade.grade})
return render(...)
模板中的
class GradeForm(forms.Form):
grade = forms.DecimalField()
reason = forms.CharField(widget=forms.Textearea(), required = True)
EDIT2:我找到了解决方法。我将字段设置为不需要,我在模板中将其设置为JS。
{%if grade.grade is None%}
<script>
window.onload = function(){
document.getElementById("id_reason").parentElement.style.display = "none";
}
</script>
{%endif%}
我知道这不是最佳的,因为用户可以编辑html而不发送原因,但这对于这个应用来说已经足够了。
答案 0 :(得分:0)
您需要覆盖您的编辑表单,并将其添加到您的视图中
class EditGradeForm(forms.Form):
grade = forms.DecimalField(required = False)
reason = forms.CharField(widget=forms.Textearea(), required = False)
或者您可以覆盖
def __init__ (self, grade=None, *args, **kwargs):
if grade:
# put your code