2017-04-08 44 views
0
def user_info(request, template_name='social/retrieve_user_data.html', username=None): 
    user = User.objects.get(username=username) 
    if request.method == 'POST': 
     form = UserInfoForm(request.POST, user) 
     print(form.is_valid()) 
     if form.is_valid(): 
      form.save() 
    else: 
     print('not post') 
     form = UserInfoForm(user) 


    return render_to_response(template_name, RequestContext(request, { 
     'form': form, 
    })) 


class UserInfoForm(forms.Form): 


    def __init__(self,*args,**kwargs): 
     self.user = kwargs.pop('user') 
     super(UserInfoForm,self).__init__(*args,**kwargs) 

這是產生一個異常值u'user'的KeyError。這裏有什麼問題?在這兩種情況下,表單都是用有效的用戶值初始化的。爲什麼我得到一個錯誤>Django形式kwargs中的KeyError

+0

如果你想訪問表單字段,你應該在調用'super'方法後使用'self.cleaned_data'字典。 –

回答

2

您沒有將用戶作爲關鍵字參數傳遞給if或else塊。它應該是:

form = UserInfoForm(request.POST, user=user) 

和:

form = UserInfoForm(user=user) 
0

只有func(foo=bar)可以把{"foo":bar}kwargs詞典!根據您的代碼form = UserInfoForm(request.POST, user),您可以使用self.user = args[1]來捕獲user