2010-08-20 7 views
0

J'ai un formulaire sur ma page d'accueil. Selon moi, pour qui ressemble à ceci:Django ModelForm validé sans soumettre

from djangoproject1.authentication import forms 
from django.http import HttpResponseRedirect 
from django.shortcuts import render_to_response 

def main(request): 
    uf = forms.UserForm() 
    upf = forms.UserProfileForm() 
    return render_to_response("authentication/index.html", {'form1': uf, 'form2':upf}) 

def register(request): 
    if request.method == 'POST': 
     uf = forms.UserForm(request.POST) 
     upf = forms.UserProfileForm(request.POST) 
     if uf.is_valid() and upf.is_valid(): 
      user = uf.save(commit=False) 
      user.set_password(uf.cleaned_data["password"]) 
      user.save() 
      userprofile = upf.save(commit=False) 
      userprofile.user = user 
      userprofile.save() 
      return HttpResponseRedirect("/register-success/") 
    return render_to_response("authentication/index.html", {'form1': uf,'form2':upf}) 

Il fait une forme avec ces deux parties. Lorsque je lance mon navigateur, tous les messages d'erreur apparaissent déjà. Je pensais que cela les laissait non liés et donc ils ne tenteraient pas d'être validés puisque je n'avais rien publié.

est ici le code de formulaire:

from django import forms 
from django.contrib.auth.models import User 
from djangoproject1.authentication.models import UserProfile  

class UserForm(forms.ModelForm): 
    cpassword = forms.PasswordInput() 

    def clean(self): 
     if self.cleaned_data['cpassword']!=self.cleaned_data['password']: 
      raise forms.ValidationError("Passwords don't match") 

    class Meta: 
     model = User 
     fields = ('username','email','password',) 

class UserProfileForm(forms.ModelForm): 
    class Meta: 
     model = UserProfile 
     fields = ('phonenumber',) 

Voici le html:

<h1>Register</h1> 
    <form action="/register/" method="post"> 
     {{ form1.as_p }} 
     {{ form2.as_p }} 
     <input type="submit" value="Register"> 
    </form> 
+1

Ce n'est pas possible avec le code que vous nous avez montré. Est-ce vraiment la vue complète que vous utilisez? Montrez votre code de modèle aussi. –

+0

a modifié mon code postuel original – JPC

Répondre

0

Il s'avère que ce n'était pas des erreurs mais des textes d'aide.

0

D'après ce que vous avez décrit, il semble que si vous touchez la vue register avec un POST non valide. Mais vous dites que cela se passe sur la vue main lorsque vous allez à la page?

là, mais ils se présenteraient sur une forme liée après un échec is_valid appel à register ne devrait pas être une erreur de forme avec une forme non liée (comme main reviendriez).

La seule chose que je peux voir est que votre méthode clean sur UserForm ne return self.cleaned_data.

Il peut être plus facile de résoudre les problèmes si vous changez temporairement le nom de l'un des modèles et assurez-vous d'obtenir la vue que vous pensez être.