2016-04-23 6 views
1

Ich habe ein Django-Formular, das aus einem E-Mail- und einem Namensfeld besteht. Ich möchte den Namen validieren, um mehr als 8 Zeichen zu haben. Ich habe den folgenden Code verwendet. Aber es funktioniert nicht.Feldüberprüfung in einem Django-Formular

class SignUpForm(forms.ModelForm): 
    class Meta: 
     model=SignUp 
     fields=('email','name') 
    def emailValidation(self): 

     name=self.cleaned_data.get('name') 
     if len(name) <=8: 
      raise forms.ValidationError("name cannot be less than 8") 

models.py

class SignUp(models.Model): 
    name=models.CharField(max_length=200) 
    email=models.EmailField() 
    timestamp=models.DateTimeField(auto_now_add=True, auto_now=False) 
    updated=models.DateTimeField(auto_now=True,auto_now_add=False) 
    def __unicode__(self): 
     return self.name 

views.py

def home(request): 
    form=SignUpForm(request.POST or None)           
    if form.is_valid():            

     instance=form.save(commit=False) 
     instance.save() 
     print instance.timestamp 
    return render(request, 'home.html',{'form':form}) 
+1

Bitte beheben Sie Ihre Einrückung. –

+0

hat es getan. Entschuldigung .. – user2375245

+0

Sind Sie sicher, dass die Einrückung im Formular die gleiche wie in Ihrer tatsächlichen Datei ist? –

Antwort

0

Sie müssen korrekten Namen für Ihre Validierungsmethode verwenden. Django-Formulare rufen Methoden mit dem Format clean_<fieldname> auf.

Auch Sie scheinen verwirrt zu sein, welches Feld Sie validieren; Ihre E-Mail-Validierungsmethode sollte clean_email heißen und sollte auf den E-Mail-Wert über form.cleaned_data['email'] zugreifen, und der Name sollte clean_name heißen und auf form.cleaned_data['name'] zugreifen.

+0

vielen Dank..es ist gelöst. – user2375245

0

So etwas kann Ihnen eine Anleitung geben.

class RegistrationForm(forms.ModelForm): 
    """ 
    Form for registering a new account. 
    """ 
    firstname = forms.CharField(label="First Name") 
    lastname = forms.CharField(label="Last Name") 
    phone = forms.CharField(label="Phone") 
    email = forms.EmailField(label="Email") 
    password1 = forms.CharField(label="Password") 
    password2 = forms.CharField(label="Password (again)") 
    min_password_length = 8 

class Meta: 
    model = User 
    fields = ['firstname', 'lastname', 'phone', 'email', 'password1', 'password2'] 

def clean_email(self): 
    email = self.cleaned_data['email'] 
    if User.objects.filter(email=email).exists(): 
     raise forms.ValidationError(u'Email "%s" is already in use! Please log in or use another email!' % email) 
    return email 

def clean_password1(self): 
    " Minimum length " 
    password1 = self.cleaned_data.get('password1', '') 
    if len(password1) < self.min_password_length: 
     raise forms.ValidationError("Password must have at least %i characters" % self.min_password_length) 
    else: 
     return password1 

def clean(self): 
    """ 
    Verifies that the values entered into the password fields match 

    NOTE: Errors here will appear in ``non_field_errors()`` because it applies to more than one field. 
    """ 
    cleaned_data = super(RegistrationForm, self).clean() 
    if 'password1' in self.cleaned_data and 'password2' in self.cleaned_data: 
     if self.cleaned_data['password1'] != self.cleaned_data['password2']: 
      raise forms.ValidationError("Passwords didn't match. Please try again.") 
    return self.cleaned_data 

def save(self, commit=True): 
    user = super(RegistrationForm, self).save(commit=False) 
    user.set_password(self.cleaned_data['password1']) 
    if commit: 
     user.save() 
    return user 
1

In Ihrer SignUpForm, in der Funktion emailValidation, haben Sie 'name' nicht zurückgegeben. Ein großer Fehler ist auch, dass Sie die Funktion clean_ (field_name) und nicht emailValidation nennen müssen. Dies sollte ich tun:

class SignUpForm(forms.ModelForm): 
    class Meta: 
     model=SignUp 
     fields=('email','name') 
    def clean_name(self): 

     name=self.cleaned_data.get('name') 
     if len(name) <=8: 
      raise forms.ValidationError("name cannot be less than 8") 
     return name 
Verwandte Themen