2014-12-04 13 views
0

對於提出一個問題的道歉很明顯,這個問題很簡單,我個人做錯了,但我不能在這裏找到bug ...Django錯誤「Boundfield沒有屬性條」:分配給表單字段對象本身的值

我有一個名爲fixer_signup_form的Django表單,它提供了一個名爲fixer_intro的視圖。

class fixer_signup_form(forms.Form): 
    contact_first_name = forms.CharField(max_length=128, required=True) 
    contact_last_name = forms.CharField(max_length=128, required=True) 
    company_name = forms.CharField(max_length=256, label='Company Name (Optional)') 
    email = forms.EmailField(required=True) 
    password = forms.CharField(max_length=1024, widget=forms.PasswordInput, required=True) 
    password2 = forms.CharField(max_length=1024, widget=forms.PasswordInput, required=True, label='Repeat Password') 
    zip_code = forms.CharField(max_length=8, required=True) 

    def clean(self): 
      username = self.cleaned_data["email"] 
      password = self.cleaned_data["password"] 
      password2 = self.cleaned_data["password2"] 
      zip_code = self.cleaned_data["zip_code"] 

      if password != password2: 
        raise forms.ValidationError("Your passwords do not match. Please try again.") 
      email_taken = User.objects.filter(username=username) 
      if email_taken: 
        raise forms.ValidationError({'email':["There is already an existing account with that email address."]}) 
        return self 
      if password: 
        if len(password) < 9: 
          raise forms.ValidationError("Your password is too short. Please ensure that it is longer than 9 characters.") 
      return self 

這裏

def fixer_intro(request): 
    form = fixer_signup_form() 
    if request.POST: 
     form = fixer_signup_form(request.POST) 
     if form.is_valid(): 
      username = form.cleaned_data['email'] 
      password = form.cleaned_data['password'] 
      company_name = form.cleaned_data['company_name'] 
      user = User.objects.create_user(username, username, password) 
      login(request, user) 
      fixer = fixer.create(user=user, company_name=company_name) 
      fixer.save() 
      return HttpResponseRedirect(reverse("Fixers:fixers_home")) 
    return render(request, "public_fixer_intro.html",{'signup_form': form}) 

形式正確驗證。然而,Django的調試引發了一個「BoundField沒有屬性'strip'」的錯誤,並且告訴我,儘管POST數據中包含我接收到的值,但我在視圖中分配的用戶名和密碼值已分配給表單本身的BoundField對象,而不是它們包含的數據。例如:

username <django.forms.forms.BoundField object at 0x7fe9787a2410> 
password <django.forms.forms.BoundField object at 0x7fe97873abd0> 

所以我清楚地分配我的價值觀不正確,但每次我在網上看到的資源表示,引用form.cleaned_data []字典的值是正確的方式來獲得表單中的數據(而不是POST請求本身)。任何人都可以告訴我我應該怎麼做?

非常感謝!

回答

0

你從clean()返回self你應該返回self.cleaned_data

雖然事實上,自從Django 1.7。你don't need to return anything在所有。

+0

Aaaah! Yepp就是這樣。非常感謝! – 2014-12-06 17:32:29

相關問題