【发布时间】:2018-06-03 19:57:37
【问题描述】:
我有一个新用户的注册视图。在这里,新用户输入他的电子邮件地址和密码(每次两次)、他的名字和姓氏以及他的生日。一切正常(它保存了电子邮件地址、密码和姓名),但我无法使用此表单保存他的生日。
我可以在登录 /admin 时添加日期并保存日期。
forms.py:
class UserRegisterForm(forms.ModelForm):
username=forms.EmailField(label='Email address')
email=forms.EmailField(label='Confirm Email')
password=forms.CharField(widget=forms.PasswordInput)
password2=forms.CharField(widget=forms.PasswordInput)
first_name=forms.CharField(label='First Name')
last_name=forms.CharField(label='Last Name')
birthday=forms.DateField(label='Birthday')
class Meta:
model=User
fields=[
'username',
'email',
'password',
'password2',
'first_name',
'last_name',
'birthday',
]
def clean(self,*args,**kwargs):
username=self.cleaned_data.get("username")
email=self.cleaned_data.get("email")
password=self.cleaned_data.get("password")
password2=self.cleaned_data.get("password2")
username=self.cleaned_data.get("username")
birthday=self.cleaned_data.get("birthday")
if username!=email:
raise forms.ValidationError("Emails must match")
email_qs=User.objects.filter(username=username)
if email_qs.exists():
raise forms.ValidationError("This Email has already been registered")
if password!=password2:
raise forms.ValidationError("Passwords must match")
return super(UserRegisterForm,self).clean(*args,**kwargs)
models.py:
class UserTest(models.Model):
username=models.OneToOneField(User, on_delete=models.CASCADE)
email=models.EmailField(User)
first_name=models.CharField(max_length=20)
last_name=models.CharField(max_length=20)
birthday=models.DateField(auto_now=False, null=True, blank=True)
def __str__(self):
return self.username.username
def create_profile(sender, **kwargs):
if kwargs['created']:
user_profile=UserTest.objects.create(username=kwargs['instance'])
post_save.connect(create_profile,sender=User)
views.py
def register_user_view(request):
title="Register User"
form=UserRegisterForm(request.POST or None)
if form.is_valid():
user=form.save(commit=False)
password=form.cleaned_data.get('password')
birthday=form.cleaned_data.get('birthday')
user.save(password)
user.set_password(password)
user.save()
new_user=authenticate(username=user.username,password=password)
login(request,user)
return redirect("/register/done")
context={
"form":form,
"title":title
}
return render(request,"form.html",context)
我必须在哪里输入更多内容(什么?)?
【问题讨论】:
-
你能提供一个通过这个表单添加的用户的例子吗?
-
身份验证和授权中的用户保存有用户名、名字和电子邮件地址(用户名=电子邮件地址)。帐户中的用户(即我的应用程序的名称)保存用户名和电子邮件地址(当与注册表单一起添加时)。添加 /admin 时会额外保存出生日期。
标签: django