我创建了注册表单:
#urls.py
from django.conf.urls import patterns, url
from django.views.generic import TemplateView
from account.views import Register
urlpatterns = patterns('',
url(r'^register/$', Register.as_view(template_name='account/register.html')),
)
#views.py
from django.views.generic import CreateView
from django.contrib.auth.models import User
class Register(CreateView):
model = User
success_url = '/account/'
我有疑问:如何添加该电子邮件是必需的(现在我只能输入用户名,密码和2倍的时间)。
@edit
以及如何“修复”密码?当我创建用户(以这种形式)然后转到管理面板时,在用户i中看到“无效的密码格式或未知的散列算法。”。我怎么修这个?
答案 0 :(得分:2)
不需要电子邮件的原因是因为您使用的是ModelForm
,它会从基础User
模型中获取大量提示。具体而言,模型的required=True
字段中不存在email
属性。
一种解决方案是使用必要的属性创建自己的表单,可能使用ModelForm并添加所需的电子邮件字段。
另一种解决方案,也许是更好的解决方案,就是使用Aamir Adnan在您的问题评论中提到的django-registration之类的内容。它会为你简化很多事情。
就repair password
而言,您无法像使用CreateView
那样将密码设置为原始字符串值。要设置密码,您必须致电user.set_password(raw_string)
,它将为您处理散列和腌制。看看内置UserCreationForm是如何工作的,如果您决定自己构建表单,而不是使用库(您不应该),请尝试模仿它。
答案 1 :(得分:0)
要解决这两个问题,您可以使用以下形式:
class UserCreationForm(forms.ModelForm):
class Meta:
model = User
def __init__(self, *args, **kwargs):
super(UserCreationForm).__init__(*args, **kwargs)
self.fields['email'].required = True
def save(self, commit=True):
user = super(UserCreationForm, self).save(commit=False)
user.set_password(self.cleaned_data["password"])
if commit:
user.save()
return user
class Register(CreateView):
model = User
form_class = UserCreationForm
success_url = '/account/'
但是还会出现其他问题,例如重复用户名。