2016-07-30 15 views
0

Folgende geschieht, ist mein Code ein Formular für die Erstellung von:Django - Form Validierung nicht

from django import forms 
class Register(forms.Form): 
    username = forms.CharField(label='', max_length=64, required=True) 
    firstname = forms.CharField(label='', max_length=64, required=True) 
    surname = forms.CharField(label='sur name', max_length=64, required=True) 
    email = forms.EmailField() 

Der Code meines view.py sich wie folgt:

from .forms import Register 
def register(request): 
    form = Register() 
    return render(request, 'app/register.html', {'form': form}) 

Es ist die Anzeige der Form in die Webseite, aber sie validiert nicht den Benutzernamen, den Vornamen und den Nachnamen; während es das emailfield validiert.

Ich versuchte, die saubere Methode verwenden, und meine neue forms.py ist wie folgt:

from django import forms 
class Register(forms.Form): 
    username = forms.CharField(label='', max_length=64, required=True) 
    firstname = forms.CharField(label='', max_length=64, required=True) 
    surname = forms.CharField(label='sur name', max_length=64, required=True) 
    email = forms.EmailField() 

    def clean_surname(self): 
     data = self.cleaned_data['surname'] 
     if not data: 
      raise forms.ValidationError("This field is required") 
     return data 

Was könnte das Problem sein? Mache ich etwas falsch. Bitte hilf mir dabei, ich bin neu in Django.

Antwort

3

Um das Formular zu validieren, müssen Sie es mit Daten aus der POST-Anfrage füllen und prüfen, ob es gültig ist. Ihre Ansicht sollte wie folgt aussehen:

from .forms import Register 

def register(request): 
    if request.method == 'POST' # process form data 
     # create form instance, populate it with data 
     form = Register(request.POST) 
     # check if the data is valid 
     if form.is_valid(): 
      # process/save the data 
      # ... 
      # then redirect to a new URL: 
      return HttpResponseRedirect('/a/new/url/') 
    else: 
     # GET or other method, create a blank form 
     form = Register() 
    return render(request, 'app/register.html', {'form': form}) 

mehr im documentation.

+0

Vielen Dank, ich dachte die saubere Methode macht die Formularvalidierung. Auch wenn ich die clean-Methode verwende, soll ich die Postdaten in das Formular eingeben? – Jeril

+1

Die 'clean()' Methode wird während der 'if form.is_valid()' Prüfung aufgerufen, und sie benötigt das Formular mit Daten gefüllt, also - ja, Sie müssen die POST Daten in das Formular übergeben. – rafalmp

+0

Vielen Dank es hat funktioniert .. – Jeril

1

Sie geben keine Postdaten in Ihr Formular ein. Es soll wie folgt aussehen:

from .forms import Register 
def register(request): 
    form = Register(request.POST or None) 
    if request.method == 'POST' and form.is_valid(): 
     # your action when form is valid 
    else: 
     return render(request, 'app/register.html', {'form': form}) 

or None nach request.POST wird, dass leere POST Wörterbuch gewährleisten wird nicht in das Formular übergeben werden, so die Validierung nicht beim ersten Laden der Seite ausgelöst werden - wenn es nichts vorgelegt.

Auch die Validierung der E-Mail-Feld stammt wahrscheinlich von Ihrem Browser, nicht von Django.

+0

Vielen Dank, ich dachte, die saubere Methode macht die Formularvalidierung. Auch wenn ich die clean-Methode verwende, soll ich die Postdaten in das Formular eingeben? – Jeril