我使用创建视图在系统中创建用户,但管理员一直表示存在"无效的密码格式或未知的散列算法。"对于用户?我使用框架提供的UserCreationForm
from django.views.generic.edit import CreateView
from django.contrib.auth.forms import UserCreationForm
class UserCreate(CreateView):
model = User
form = UserCreationForm
fields = ('username', 'first_name', 'last_name', 'password')
template_name = 'exts/user_create.html'
def get_success_url(self):
# login the person
self.object.backend = 'django.contrib.auth.backends.ModelBackend'
auth_login(self.request, self.object)
# now return the success url
return '/'
def get_form(self, form_class=None):
form = super(CreateView, self).get_form(form_class)
form.fields['password'].widget = forms.PasswordInput()
return form
答案 0 :(得分:2)
在使用Django的默认用户模型时,密码在存储之前已加密。因此,您不能像其他字段一样简单地设置用户的密码。您应该使用用户模型的set_password('MyPassword')
方法覆盖您的保存方法以设置密码
答案 1 :(得分:1)
您需要使用form_class
而不是form
来指定要使用的表单类。
您的字段中还有password
,但UserCreationForm
未指定password
字段。由于它是模型上的有效字段,因此会自动生成表单字段,但不会正确设置密码。
您应该添加password1
和password2
字段:
class UserCreate(CreateView):
model = User
form = UserCreationForm
fields = ('username', 'first_name', 'last_name', 'password1', 'password2')
...
答案 2 :(得分:0)
想出来!原来你想使用表单类属性而不是表单和模型属性,现在完美地工作!
class UserCreate(CreateView):
form_class = UserCreationForm
template_name = 'exts/user_create.html'
success_url = '/'
def get_success_url(self):
# login the person
self.object.backend = 'django.contrib.auth.backends.ModelBackend'
auth_login(self.request, self.object)
# now return the success url
return '/'