首先,我是Django编程的新手。这是我所拥有的:
register.html模板中的<form>
:
<form method='POST' action='/accounts/register/'>
{% csrf_token %}
{% for field in form %}
{{ field.label_tag }}{{ field }} {{field.help_text}} {{field.errors}{}
<br/>
{% endfor %}
<input type='submit' value='Register' />
</form>
这在我的表单中。py
class MyRegistrationForm(UserCreationForm):
email = forms.EmailField(required=True)
first_name = forms.CharField(required = True)
last_name = forms.CharField(required = True)
password1 = forms.RegexField(widget=forms.PasswordInput,
regex = r'[w+]{8,}',
label = 'New password',
help_text = "Must be strong!",
error_messages = {'required' : "ASDASDA",
'invalid' : "ZZZZZ"}
)
password2 = forms.RegexField(widget=forms.PasswordInput,
regex = r'[w+]{8,}',
label = 'Re-enter password',
)
class Meta:
model = User
fields = ('last_name', 'first_name', 'username', 'email', 'password1', 'password2')
def save(self, commit = True):
user = super(MyRegistrationForm, self).save(commit = False)
user.email = self.cleaned_data['email']
user.first_name = self.cleaned_data['first_name']
user.last_name = self.cleaned_data['last_name']
if commit:
user.save()
return user
这在我的视图中。py
def User_Register_View(request):
if request.method == 'POST':
form = MyRegistrationForm(request.POST)
if form.is_valid():
form.save()
register_success = "Account successfuly created!"
return render(request,'index.html', locals())
args = {}
args.update(csrf(request))
args['form'] = MyRegistrationForm()
return render(request,'accounts/register.html',args)
我的问题如下:
{{field.errors}}不工作。未打印任何错误。如果我让表单的所有字段都为空,然后单击"注册",则不会出现任何错误。
如果我在这个论坛中添加另一个字段,"gender"作为CharField,它会在我的DB中创建一个关于性别的列吗?(我正在使用默认的sqlite3)
有没有一种简单的方法可以修改我的代码,使"用户"字段可选,而使"电子邮件"字段是唯一的和必需的?
在我的代码所在的状态下,我在哪里可以在数据库中检查我的电子邮件的唯一属性?它在我的views.py中吗,就在form.save()之前?
谢谢。如果你有任何问题,请告诉我
def User_Register_View(request):
if request.method == 'POST':
form = MyRegistrationForm(request.POST)
if form.is_valid():
form.save()
register_success = "Account successfuly created!"
return render(request,'index.html', locals())
else:
form = MyRegistrationForm() # An unbound form
args = {}
args['form'] = form
return render(request,'accounts/register.html',args)
{{field.errors}}现在显示,因为如果验证失败,则不会返回已验证的表单实例。您总是返回MyRegistrationForm的一个新实例。请参阅上面的示例。
向表单添加字段不会影响数据库,因为只有模型映射到数据库表
&4.你需要自定义用户模型才能做到这一点,请参阅这里的示例,了解如何做到