如何在 Django 用户模型中添加新字段

How to add new fields in django user model

如何在 Django 用户模型中添加新字段。 django 用户模型带有标准的用户名电子邮件和密码,但是我希望用户有更多与其帐户相关联的详细信息,比如 phone 号码或其他内容。执行此操作的最佳方法是什么?

有几种方法可以做到这一点。您可以在官方文档中阅读所有这些内容。 Here.

您可以通过创建 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")

然后您创建人们将在注册期间填写的表格。它将是用户模型表单和您的自定义配置文件表单。

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'}),
        }

然后您需要在他完成后将两个表单的数据保存到用户实例 registation.I 我正在使用此方法:

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})

所以当人们进入注册页面时 he/she 会看到 2 个表格,用户表格和个人资料表格,需要填写它们才能通过注册。当按下提交按钮时(post 请求)视图检查所有数据是否正确并创建具有标准字段的用户配置文件和自定义配置文件实例以及链接到该用户并可以访问的所需附加字段(例如 User.profile.birthdate).

希望对您有所帮助。