/ users / register /'password1'中的KeyError

时间:2018-12-27 08:04:02

标签: django django-models django-forms django-templates django-views

我想以test@123的身份为所有用户生成密码,但这给了我错误。甚至我也想从模板中删除密码输入字段

Register.py

def register(request):

if request.method == 'POST':
    ur_form = UserRegisterForm(request.POST)
    pr_form = UserProfileForm(request.POST, request.FILES)


    #  Getting User Role Id of Current Logged in Users
    user_role = 0
    if request.user.userprofile.user_role_id == 1: # 1 for Super Admin
        user_role = 2
    elif request.user.userprofile.user_role_id == 2: # 2 for Admin
        user_role = 3
    elif request.user.userprofile.user_role_id == 3: # 3 for Manager
        user_role = 4 # 4 for Employee

    if ur_form.is_valid() and pr_form.is_valid():

        new_user = ur_form.save(commit=False)            
        new_user.username = new_user.email
        password = 'test@123'
        new_user.set_password(password) # <- here
        new_user.save()

        profile =  pr_form.save(commit=False)
        if profile.user_id is None:
            profile.user_id = new_user.id
            profile.user_role_id = user_role
        profile.save()
        username = ur_form.cleaned_data.get('username')
        messages.success(request, 'Your Account has been created for %s!' % username)
        return redirect('users')
else:
    ur_form = UserRegisterForm()
    pr_form = UserProfileForm()
return render(request, 'users/register.html', {'ur_form': ur_form, 'pr_form': pr_form})

Forms.py

class UserRegisterForm(UserCreationForm):
    email = forms.EmailField()
    first_name = forms.CharField()
    last_name = forms.CharField()
    class Meta:
        model = User
        fields = ['first_name','last_name', 'email', 'password1','password2']

    def __init__(self, *args, **kwargs):
       super(UserRegisterForm, self).__init__(*args, **kwargs)
       del self.fields['password1']
       del self.fields['password2']

终端错误:

new_user = ur_form.save(commit=False)
  File "/home/codism-7/.local/share/virtualenvs/njoxc1BQ/lib/python3.5/site-packages/django/contrib/auth/forms.py", line 119, in save
    user.set_password(self.cleaned_data["password1"])
KeyError: 'password1'

1 个答案:

答案 0 :(得分:0)

尝试:

# Forms.py
class UserRegisterForm(UserCreationForm):
    email = forms.EmailField() # Depending on how your user model looks you may not need to even specify these fields. Just the fields setting in Meta would be enough.
    first_name = forms.CharField()
    last_name = forms.CharField()
    class Meta:
        model = User
        fields = ['first_name','last_name', 'email', 'password1', 'password2']

    def __init__(self, *args, **kwargs):
       super(UserRegisterForm, self).__init__(*args, **kwargs)
       self.fields['password1'].widget = forms.HiddenInput()
       self.fields['password1'].initial = 'Test@123' # You can set the initial value of the field.
       self.fields['password2'].widget = forms.HiddenInput()
       self.fields['password2'].initial = 'Test@123' # You can set the initial value of the field.