2017-08-26 1 views
0

Dans l'exemple ci-dessous, j'essaie d'afficher tous les messages d'erreur dans le modèle. J'ai essayé presque tout ce qui est mentionné dans tout le forum. Voici mon code. S'il vous plaît dites-moi ce que je suis absentLe formulaire Django ne s'affiche pas après le POST

Formulaire

class RegistrationForm(UserCreationForm): 
    email = forms.EmailField(required=True) 

    class Meta: 
     model = User 
     fields = (
      'username', 
      'first_name', 
      'last_name', 
      'email', 
      'password1', 
      'password2' 
     ) 

     def save(self, commit=True): 
      user = super(RegistrationForm, self).save(commit=False) 
      user.first_name = self.cleaned_data['first_name'] 
      user.last_name = self.cleaned_data['last_name'] 
      user.email = self.cleaned_data['email'] 

      if commit: 
       user.save() 

      return user 

Voir

def register (request): 
    print(request.method) 
    if request.method == 'POST': 
     form = RegistrationForm(request.POST) 
     if form.is_valid(): 
      form.save() 
      print("Saved") 
      return render(request, 'main/product.html',{}) 
     else: 
      print("Some Error", form.errors) 
      args = {'form':form,'carousel':'display:none'}  
      print(args['form']) 
      return render(request, 'accounts/register.html',args) 
     # if a GET (or any other method) we'll create a blank form 
    else: 
     form = RegistrationForm() 

    args = {'form':form,'carousel':'display:none'} 
    return render(request, 'accounts/register.html',args) 

HTML Template

<form id="register" method="post" action="{% url 'register' %}"> 
    {% csrf_token %} 
    <div class="form-register-with-email"> 
    <div class="form-white-background"> 
    <div class="form-title-row"> 
     <h1>Create an account</h1> 
    </div> 
    {{ form.errors }} 
    {% for field in form %} 
    <div class="form-row"> 
     <label> 
     <span>{{field.label}}</span> 
     {{ field }} 
     </label> 
    </div> 
    {% endfor %} 

    <div class="form-row"> 
     <button type="submit">Register</button> 
    </div> 
    </div> 
    </div> 
</form> 

La vue est déclenchée après que j'appuie sur submit et que le formulaire affiche tout le message d'erreur lorsque je l'imprime avant l'instruction de rendu. Mais le rendu ne déclenche aucune modification à l'écran après l'envoi.

Voici la sortie de django en impression.

<ul class="errorlist"><li>username<ul class="errorlist"><li>A user with that username already exists.</li></ul></li><li>password2<ul class="errorlist"><li>The password is too similar to the username.</li><li>This password is too short. It must contain at least 8 characters.</li><li>This password is too common.</li></ul></li></ul> 
<tr><th><label for="id_username">Username:</label></th><td><ul class="errorlist"><li>A user with that username already exists.</li></ul><input autofocus="" id="id_username" maxlength="150" name="username" type="text" value="test" required /><br /><span class="helptext">Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only.</span></td></tr> 
<tr><th><label for="id_first_name">First name:</label></th><td><input id="id_first_name" maxlength="30" name="first_name" type="text" value="test" /></td></tr> 
<tr><th><label for="id_last_name">Last name:</label></th><td><input id="id_last_name" maxlength="30" name="last_name" type="text" value="test" /></td></tr> 
<tr><th><label for="id_email">Email:</label></th><td><input id="id_email" name="email" type="email" value="[email protected]" required /></td></tr> 
<tr><th><label for="id_password1">Password:</label></th><td><input id="id_password1" name="password1" type="password" required /></td></tr> 
<tr><th><label for="id_password2">Password confirmation:</label></th><td><ul class="errorlist"><li>The password is too similar to the username.</li><li>This password is too short. It must contain at least 8 characters.</li><li>This password is too common.</li></ul><input id="id_password2" name="password2" type="password" required /><br /><span class="helptext">Enter the same password as before, for verification.</span></td></tr> 
[26/Aug/2017 10:01:19] "POST /register/ HTTP/1.1" 200 5732 

Que manque-t-il?

Répondre

0

fais comme ça

print(request.method) 
if request.method == 'POST': 
    form = RegistrationForm(request.POST) 
    if form.is_valid(): 
     form.save() 
     print("Saved") 
     return render(request, 'main/product.html',{}) 
else: 
    form = RegistrationForm() 
    args = {'form':form,'carousel':'display:none'} 
    return render(request, 'accounts/register.html',args) 
+0

Dans le code ci-dessus, le formulaire ne restituera rien s'il n'est pas valide. Je veux que le modèle affiche toutes les erreurs si l'utilisateur entre des données erronées. – sdev

0

résolu le problème. C'était un ancien code dans mon fichier javascript qui causait le problème. Le formulaire soumis correctement une fois que cela a été corrigé.