我想以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'
答案 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.