Sty*_*xin 5 python django django-models django-users
如何在 django 用户模型中添加新字段。django 用户模型带有标准的用户名电子邮件和密码,但是我希望用户有更多与他们的帐户相关联的详细信息,例如电话号码或其他内容。什么是最好的方法来做到这一点?
有几种方法可以做到这一点。您可以在官方文档中阅读所有这些内容。在这里。
您可以通过创建 AbstractUser 来扩展 User 模型,也可以创建您自己的名为“Profile”的模型(例如),它以这种方式链接到 User 实例:
models.py
class Profile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
phonenumber = models.CharField(verbose_name="phone number", max_lenght=10)
birthdate = models.DateField(verbose_name="birth date")
Run Code Online (Sandbox Code Playgroud)
然后您创建该人将在注册期间填写的表格。它将是用户模型表单和您的自定义配置文件表单。
forms.py
class UserForm(UserCreationForm):
email = forms.EmailField()
class Meta:
model = User
fields = ['username', 'first_name', 'email', 'password1', 'password2']
class ProfileForm(forms.ModelForm):
class Meta:
model = Profile
fields = ['birthdate', 'phonenumber']
widgets = {
'birthdate': DateInput(attrs={'type': 'date'}),
}
Run Code Online (Sandbox Code Playgroud)
那么你需要在他完成注册时将两个表单的数据保存到用户实例中。我正在使用这个方法:
views.py
def register(request):
if request.method == "POST":
u_form = UserForm(request.POST)
p_form = ProfileForm(request.POST)
if u_form.is_valid() and p_form.is_valid():
user = u_form.save()
p_form = p_form.save(commit=False)
p_form.user = user
p_form.save()
messages.success(request, f'Registration complete! You may log in!')
return redirect('login')
else:
u_form = UserForm(request.POST)
p_form = ProfileForm(request.POST)
return render(request, 'users/register.html', {'u_form': u_form, 'p_form': p_form})
Run Code Online (Sandbox Code Playgroud)
因此,当人们进入注册页面时,他/她会看到 2 个表单,用户表单和个人资料表单,需要填写它们才能通过注册。当提交按钮被按下时(发布请求)视图检查所有数据是否正确,并创建具有标准字段的用户配置文件和自定义配置文件实例,其中包含链接到该用户并可访问的所需附加字段(例如 User.profile.birthdate)。
希望有帮助。
| 归档时间: |
|
| 查看次数: |
6817 次 |
| 最近记录: |