2010-08-20 102 views
0

我在我的主頁上有一個表單。我對此的看法如下所示:Django ModelForm驗證沒有提交

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}) 

它使這兩部分形成一個表格。但是,當我啓動我的瀏覽器時,所有錯誤消息都已出現。我認爲這讓他們不受約束,因此他們不會嘗試和驗證,因爲我沒有發佈任何內容。

這裏的表單代碼:

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',) 

這裏的HTML:

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

對於您向我們顯示的代碼,這是不可能的。這真的是你使用的完整視圖嗎?也顯示你的模板代碼。 – 2010-08-20 08:07:33

+0

編輯了我的原代碼帖子 – JPC 2010-08-20 14:47:42

回答

0

原來,這不是錯誤,而是幫助文本。

0

從你所描述的東西,它好像你打了register視圖具有無效POST。但是當你轉到頁面時,你會說這發生在main視圖上?

不存在任何未綁定表單的表單錯誤(例如main會返回),但在register調用失敗的is_valid後,它們將顯示在綁定的表單上。

我能看到的一件事就是你的clean方法UserForm不是return self.cleaned_data

如果您暫時更改其中一個模板的名稱並確保您獲得了您認爲自己的視圖,則可能會使問題更容易排除故障。