2017-09-26 12 views
2

HTMLページにエラーメッセージを表示する際に問題が発生しています。サインアップページにDjangoのデフォルトのUserCreationFormを使用しています。それは2つのパスワードフィールドを持っています - 元のものと確認のためのもの。ユーザーが異なるパスワードを入力すると、パスワードが一致しなかったことを示すHTMLページにエラーメッセージを表示したいのに対し、/ signup /にはValue Errorが表示されます。私はドキュメントを読んで、関連する行をコードに追加しました。どこが間違っているのか分かりません。ここでDefaultUserCreationForm - djangoのテンプレートにエラーメッセージを表示

は私のviews.pyです:

def adduser(request): 
    if request.method == 'POST': 
     form = UserCreationForm(request.POST) 
     print(request.POST) 

     if(form.is_valid): 
      try: 
       user = employees.objects.get(emp_id=request.POST['username']) 
      except employees.DoesNotExist: 
       user = None 

      print(user) 
      if(user != None): 
       if request.POST['username'] in employees.objects.values_list('manager_id__emp_id',flat=True): 
        g = Group.objects.get(name='Managers') 
        newuser = form.save() 
        newuser.groups.add(g) 
       else: 
        g = Group.objects.get(name='Employees') 
        newuser = form.save() 
        newuser.groups.add(g) 

       return render(request,'login.html',{'form': form}) 
      else: 
       form = UserCreationForm() 
       return render(request,'signup.html', {'form': form, 'msg': 'Enter valid employee id'}) 
    else: 
     form = UserCreationForm() 

     return render(request,'signup.html', {'form': form}) 

、ここでは私のsignup.htmlです:

<body> 
    <div class="container"> 
     <div class="page-header"> 
      <h1>Sign-up Here</h1>  
     </div> 
     {% block body %} 


     <form method="post"> 
      {% csrf_token %} 
      <font color="orange" size="5px"><p> * Enter your Employee id, as username * </p></font> 
      {{ form.as_p }} 
      <font color="red"> {{ msg }} </font><br> 
      <font color="red"> {{ form.password1.errors }} </font><br> 
      <font color="red"> {{ form.password2.errors }} </font><br> 

      <br> 
      <button class="btn btn-success" type="submit"> Go! </button> 
     </form> 

     {% endblock %}  

    </div> 
</body> 
+0

いただきましフォームアクションこのよう ? – Vaibhav

+0

あなたのコードに修正可能な問題や修正がいくつかあります。 –

+0

@Vicmathurはビルトインフォームなので必須ではなく、アクションなしでは完全に正常に動作しています。 –

答えて

1

問題は、この行である:

if(form.is_valid): 

これではありませんフォームの検証をテストする正しい方法は、代わりに を使用してください。

if form.is_valid(): 

また、フォームを複数回宣言する必要はありません。一度だけ実行できます。

def adduser(request): 
    form = UserCreationForm(request.POST or None) 
    if request.method == 'POST': 
     print(request.POST) 
     if form.is_valid(): 
      try: 
       user = employees.objects.get(emp_id=request.POST['username']) 
      except employees.DoesNotExist: 
       user = None 

      print(user) 
      if(user != None): 
       if request.POST['username'] in employees.objects.values_list('manager_id__emp_id',flat=True): 
        g = Group.objects.get(name='Managers') 
        newuser = form.save() 
        newuser.groups.add(g) 
       else: 
        g = Group.objects.get(name='Employees') 
        newuser = form.save() 
        newuser.groups.add(g) 

       return render(request,'login.html',{'form': form}) 
      else: 
       form = UserCreationForm() 
       return render(request,'signup.html', {'form': form, 'msg': 'Enter valid employee id'}) 
    return render(request,'signup.html', {'form': form}) 

そして、そこerros、フィールドnon_field_errorsのdiffrenmtタイプであるので、このようにいろいろ書いを使用することができます:

{% if form.errors %} 
    {% for field in form %} 
     {% for error in field.errors %} 
      <div class="alert alert-danger"> 
       <strong>{{ error|escape }}</strong> 
      </div> 
     {% endfor %} 
    {% endfor %} 
    {% for error in form.non_field_errors %} 
     <div class="alert alert-danger"> 
      <strong>{{ error|escape }}</strong> 
     </div> 
    {% endfor %} 
{% endif %} 
+0

おっと..愚かな間違い...ありがとう:) –

関連する問題