2017-04-08 81 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