【问题标题】:Django: Add birthday to a user profileDjango:将生日添加到用户个人资料
【发布时间】: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


【解决方案1】:
birthday = forms.DateField(required=True, 
        widget=forms.DateInput(attrs={
            'placeholder':'Birth Date', 
            'class': 'form-control',
            'type': 'date',                                                                 
        }))

在forms.py中添加代码

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-22
    • 1970-01-01
    • 2016-01-13
    相关资源
    最近更新 更多