2013-05-31 51 views
0

嘗試將django-userena用於我的其中一個項目。但在檢索其中一個表單字段的值時遇到問題。django-userena中的額外字段,無法從表單中檢索值

我的形式看起來如下(幾乎與演示相同,僅添加phone場):

class SignupFormExtra(SignupForm): 
    first_name = forms.CharField(label=_(u'First name'), max_length=30, required=False) 
    last_name = forms.CharField(label=_(u'Last name'), max_length=30, required=False) 
    phone = forms.CharField(label=_(u'Phone'), max_length=15, required=False) 

    def __init__(self, *args, **kw): 
     super(SignupFormExtra, self).__init__(*args, **kw) 
     # Put the first and last name at the top 
     new_order = self.fields.keyOrder[:-2] 
     new_order.insert(0, 'first_name') 
     new_order.insert(1, 'last_name') 
     self.fields.keyOrder = new_order 

    def save(self): 
     # First save the parent form and get the user. 
     new_user = super(SignupFormExtra, self).save() 

     new_user.first_name = self.cleaned_data['first_name'] 
     new_user.last_name = self.cleaned_data['last_name'] 
     new_user.save() 

     user_profile = new_user.get_profile() 
     user_profile.user = new_user 
     user_profile.phone_number = self.cleaned_data['phone'] 
     user_profile.save() 

     return new_user 

現在,當我填寫在註冊表單中的字段,然後點擊「提交」,我有以下錯誤:

Traceback: 
File "/usr/local/lib/python2.7/dist-packages/django/core/handlers/base.py" in get_response 
115. response = callback(request, *callback_args, **callback_kwargs) 
File "/usr/local/lib/python2.7/dist-packages/userena/decorators.py" in _wrapped_view 
28. return view_func(request, *args, **kwargs) 
File "/usr/local/lib/python2.7/dist-packages/userena/views.py" in signup 
119. user = form.save() 
File "/home/qwerty/dev/projects/qqq/accounts/forms.py" in save 
50. user_profile.phone_number = self.cleaned_data['phone'] # problem is here 

Exception Type: KeyError at /accounts/signup/ 
Exception Value: 'phone' 

所以這裏的怪的是,self.cleaned_data['phone']始終是空的,即使我輸入數據,但是不能操作last_namefirst_name沒有問題。我找不到解決問題的辦法,如果有人能告訴我正確的道路,我將不勝感激。

+0

通過執行'self.fields.keyOrder [: - 2]'你實際上將最後兩個域忽略。你不應該切片清單。 –

+0

謝謝阿米爾,你的建議解決了我的問題。如果您將此添加爲答案,我會將其選爲「已選」。 – atabek

+1

作爲回答發佈;-) –

回答

1

通過做self.fields.keyOrder[:-2]你實際上是遺漏了最後兩個領域。你不應該切片清單。

new_order = self.fields.keyOrder 
+0

我剛剛刪除了'__init__'方法。 – atabek

相關問題