仅在编辑时必填字段

时间:2017-03-13 08:20:30

标签: django django-forms

我在Django app中使用Form。 此表单用于设置值并再次更改它。

更改时,需要指定一个原因,但在设置时不需要。

我更改字段的显示'原因'如果值为None,则为none,但由于该字段为 if(headers) { return this.http.get(this.baseUrl+url, {headers: headers}).map(response => { }).catch(err=>{}); } ,因此用户无法提交表单,因为该字段未填写。

点击确认时:

Please fill this field

此外,在编辑时,该值已预先填充,但它也会显示错误,因为“' reason'字段未填写。

点击任何地方之前:

Before clisking anywhere

我该怎么办才能在编辑时才需要该字段?

编辑:代码

视图

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而不发送原因,但这对于这个应用来说已经足够了。

1 个答案:

答案 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