来自内置形式的Django keyerror

时间:2013-08-19 11:57:24

标签: django forms keyerror

我正在尝试创建一个简单的表单以添加用户。我使用内置表单生成UserCreationForm()。我找到了我用过的示例代码here

这是我的观点:

def user_add(request):
    if request.method == "POST":
        form = UserCreationForm(request.POST)
        if form.is_valid():
            new_user = User.objects.create_user(**form.cleaned_data)
            login(new_user)
            return HttpResponseRedirect('main.html')
    else:
        form = UserCreationForm() 

    return render(request, 'main/user_add_djDefault.html', {'form': form.as_p()})

表格是正确生成的,但是当我输入数据并提交时:

Exception Type: TypeError
Exception Value: 'password1' is an invalid keyword argument for this function

错误发生在这里:

new_user = User.objects.create_user(form.cleaned_data) 

由于表单创建和验证基于相同的模型,我想知道这个错误来自哪里......

1 个答案:

答案 0 :(得分:1)

您收到错误是因为create_user需要password中使用的名为password1 NOT UserCreationForm的参数。

请注意create_user的签名:

create_user(self, username, email=None, password=None, **extra_fields)

您可以尝试调用这样的方法:

cd = form.cleaned_data
User.objects.create_user(
    username=cd.get('username'),
    password=cd.get('password1'),
)