2016-09-19 2 views
0

Ich baue meine eigene Website mit Django's Framework. Ich habe ein Formular zum Erstellen eines neuen Kontos erstellt. Es funktioniert gut, aber ich habe ein Problem mit meinen Fehlermeldungen.Django-Formulare: Fehlermeldung wird ständig angezeigt, nicht nur nach Fehlern

Alle meine Fehler werden bereits angezeigt, wenn ich zum ersten Mal auf der Seite ankomme. Wenn nach dem Senden ein Feld falsch ist, werden auf der neu aktualisierten Seite nur die gewünschten Nachrichten angezeigt.

Here is a view of my page at my first arrival

Also, meine Frage ist: Wie kann ich für die Anzeige tun, um die Nachricht nur dann, wenn ein Feld ist falsch? Es gelingt mir bereits, jede Nachricht zu personalisieren.

ich fügen Sie meine verschiedenen django Dateien:

views.py

@csrf_exempt 
def create_new_user(request): 
form = UserCreateForm(request.POST) 
if request.method=="POST": 
    if form.is_valid(): 
     user = form.save() 
     messages.info(request, "Merci pour votre enregistrement, vous etes maintenant connecte") 
     new_user = authenticate(username=form.cleaned_data['username'], 
     password=form.cleaned_data['password1'] 
     ) 
     login(request, new_user) 
     return HttpResponseRedirect('/') 
    return render_to_response('lejeudesbars/register.html', RequestContext(request, {'form': form})) 
else: 
    return render(request, 'lejeudesbars/register.html', {'form': form}) 

forms.py

class UserCreateForm(UserCreationForm): 
    captcha = ReCaptchaField(error_messages={'required': 'Captcha: Validation obligatoire'}) 
    email = forms.EmailField(required=True) 
    username = forms.CharField(error_messages={'required': 'Pseudo: Champ obligatoire'}) 
    email = forms.EmailField(error_messages={'required': 'Email: Champ obligatoire'}) 
    password1 = forms.CharField(widget=forms.PasswordInput(), error_messages={'required': 'Mot de passe: Champ obligatoire'}) 
    password2 = forms.CharField(widget=forms.PasswordInput(), error_messages={'required': 'Mot de passe: Confirmation obligatoire'}) 


    class Meta: 
     model = User 
     fields = ("username", "email", "password1", "password2") 

    def save(self, commit=True): 
     user = super(UserCreateForm, self).save(commit=False) 
     user.email = self.cleaned_data["email"] 
     if commit: 
      user.save() 
     return user` 

index.html

<form method="post" action="/accounts/register/"> 
     {% csrf_token %} 
     <h1>S'enregistrer</h1> 

     {{ form.username }} 
     {% if form.errors %} 
     <p class="error-msg-register">{{ form.username.errors }}</p> 
     {% endif %} 

     {{ form.email }} 
     {% if form.errors %} 
     <p class="error-msg-register">{{ form.email.errors }}</p> 
     {% endif %} 

     {{ form.password1 }} 
     {% if form.errors %} 
     <p class="error-msg-register">{{ form.password1.errors }}</p> 
     {% endif %} 

     {{ form.password2 }} 
     {% if form.errors %} 
     <p class="error-msg-register">{{ form.password2.errors }}</p> 
     {% endif %} 

     {{ form.captcha }} 
     {% if form.errors %} 
     <p class="error-msg-register">{{ form.captcha.errors }}</p> 
     {% endif %} 

     <input style="padding: 10px" type="submit" value="Créer mon compte" /> 
     <input type="hidden" name="next" value="{{ next }}" /> 
    </form>` 

Vielen Dank im Voraus für Ihre Hilfe!

(sorry für mein schlechtes Englisch)


Dank Daniel Roseman, habe ich mein Problem gelöst. Hier ist meine aktualisiert views.py:

views.py

@csrf_exempt 
def create_new_user(request): 
    if request.method=="POST": 
     form = UserCreateForm(request.POST) 
     if form.is_valid(): 
      user = form.save() 
      messages.info(request, "Merci pour votre enregistrement, vous etes maintenant connecte") 
      new_user = authenticate(username=form.cleaned_data['username'], 
      password=form.cleaned_data['password1'] 
     ) 
      login(request, new_user) 
    else: 
     form = UserCreateForm() 
    return render(request, 'lejeudesbars/register.html', {'form': form}) 

Antwort

0

In jedem Feld, das Sie haben {% if form.errors%} - so, wenn mindestens ein Fehler ist, sind Sie werde es überall zeigen.

Änderung es zu {% if form.field_name.errors %} und dann html sollte machen nur die Fehler mit diesem spezifischen Bereich zugeordnet

+0

Es hat nicht funktioniert .. Aber dank Daniel Roseman, habe ich meinen Fehler herausgefunden :) –

4

Sie sollten nur request.POST in das Feld übergeben, wenn es tatsächlich ein POST ist. Also:

def create_new_user(request): 
    if request.method=="POST": 
     form = UserCreateForm(request.POST) 
     if form.is_valid(): 
      ... 
    else: 
     form = UserCreateForm() 
    return render(request, 'lejeudesbars/register.html', {'form': form}) 

Sie brauchen auch nicht, dass Zwischen return render_to_response(...).

+0

Vielen Dank, es hat funktioniert! Ich bin Anfänger, also ist dies ein Neuling Fehler, denke ich :) –

+0

Aber ich weiß nicht, wie ich mein Thema gelöst (Erster Beitrag in StackOverflow) übergeben. Wenn Sie mir zeigen können, wie es geht! Danke –

+0

Es sollte ein Häkchen neben der Antwort sein, auf die Sie klicken können. –

Verwandte Themen