2017-03-13 16 views
0

私はDjangoアプリケーションでフォームを使用しています。 このフォームを使用して値を設定し、再度値を変更します。編集時にのみ必要なフィールド

変更する場合は、理由を指定する必要がありますが、設定するときは指定しないでください。

値が[なし]の場合、フィールド「0120」が「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

をオーバーライドすることができますし、それを追加しましたか? –

+0

フォームコードを入力できますか? –

答えて

0

あなたの編集フォームをオーバーライドする必要があり、あなたのビュー

class EditGradeForm(forms.Form): 
    grade = forms.DecimalField(required = False) 
    reason = forms.CharField(widget=forms.Textearea(), required = False) 

またはあなたがこれを処理適切な `view`を共有できる

def __init__ (self, grade=None, *args, **kwargs): 
    if grade: 
     # put your code 
関連する問題