2017-03-13 81 views
0

我在Django應用程序中使用表單。 此表單用於設置一個值,並再次進行更改。僅在編輯時需要的字段

改變它時,需要指定一個原因,但不要在設置時指定。

當值爲None時,我將字段'reason'的顯示更改爲none,但由於該字段爲required,因爲該字段未填充,所以用戶無法提交表單。

當確認一下:

Please fill this field

另外,編輯時,該值是預先填寫,因爲「理由」字段未填寫也顯示錯誤。

前的任意位置單擊:

Before clisking anywhere

我能做些什麼,以便編輯字段時,才需要?

編輯:代碼

視圖

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) 

模板

{%if grade.grade is None%} 
<script> 
    window.onload = function(){ 
     document.getElementById("id_reason").parentElement.style.display = "none"; 
    } 
</script> 
{%endif%} 

EDIT2:我已經找到了解決辦法。我將該字段設置爲不需要,並將其設置爲在我的模板中使用JS。

{%if sub_course_grade.grade is None%} 
<script> 
     window.onload = function(){ 
       reason_field = document.getElementById("id_reason"); 
       reason_field.parentElement.style.display = "none"; 
     } 
</script> 
{%else%} 
<script> 
     window.onload = function(){ 
       reason_field = document.getElementById("id_reason"); 
       reason_field.setAttribute("required", ""); 
     } 
</script> 
{%endif%} 

我知道這是不是最優的,因爲用戶可以編輯HTML和不發送的原因,但是這是不夠好這種應用。

+0

你能分享適當的'view'處理這個? –

+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 
相關問題