2017-09-26 5 views
2

Je rencontre un problème lors de l'affichage d'un message d'erreur dans la page HTML. J'utilise UserCreationForm par défaut de Django pour la page d'inscription. Il a deux champs de mot de passe - un original et un pour la confirmation. Lorsque l'utilisateur entre des mots de passe différents, je reçois Value Error à/inscription/alors que je veux que le message d'erreur soit affiché dans la page HTML en disant que les mots de passe ne correspondent pas. J'ai parcouru les docs et j'ai ajouté quelques lignes connexes dans mon code, je ne sais pas où je vais mal.Affichage des messages d'erreur dans le modèle dans DefaultUserCreationForm - django

Voici mon 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}) 

et voici mon 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

ce qui est une action de forme? – Vaibhav

+0

Il y a d'autres problèmes/corrections dans votre code qui peuvent être corrigés. –

+0

@Vicmathur, car il s'agit d'une forme intégrée, qui n'est pas nécessaire et il fonctionne parfaitement bien sans action. –

Répondre

1

Le problème est dans cette ligne:

if(form.is_valid): 

Ce n'est pas la manière correcte de tester la validation de formulaire, à la place d'utiliser:

if form.is_valid(): 

De même, vous n'avez pas besoin de déclarer la forme plusieurs fois, cela peut être fait une seule fois. Comme ceci:

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}) 

Et il peut y avoir diffrenmt type de erros, champ et non_field_errors, utilisez donc someting comme ceci:

{% 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

oups .. erreur stupide ... merci :) –