📅  最后修改于: 2023-12-03 14:50:41.623000             🧑  作者: Mango
在 Django 中,用户模型是非常重要的,它存储了网站的注册用户信息。默认情况下,Django 提供了一个名为 User
的用户模型,它包含了必要的字段,比如 username
和 password
。但是,对于一些网站来说,这些字段可能是不够的,需要向用户模型添加额外的字段。
那么,如何向用户模型添加额外字段呢?
我们可以通过继承 Django 自带的用户模型来创建一个新的用户模型,然后在新模型中添加我们需要的字段。
先从 Django 中导入 AbstractUser
类:
from django.contrib.auth.models import AbstractUser
class CustomUser(AbstractUser):
# 添加我们需要的字段,比如手机号
phone_number = models.CharField(max_length=20, blank=True, null=True)
在这个新的用户模型中,我们添加了一个新的字段 phone_number
,它可以存储用户的手机号。其中,max_length
表示该字段的最大长度,blank=True, null=True
表示该字段可以为空。
在创建新的用户模型后,我们需要告诉 Django 使用该模型作为用户认证的模型。打开 settings.py
文件,找到以下代码:
AUTH_USER_MODEL = 'auth.User'
将其改为:
AUTH_USER_MODEL = 'myapp.CustomUser'
其中,myapp
是项目的某个应用名称,CustomUser
是我们自定义的用户模型名称。
现在,我们需要对数据库进行迁移。在命令行中执行以下命令:
python manage.py makemigrations myapp
python manage.py migrate
其中,myapp
是我们的自定义应用名。
现在,我们可以使用新的用户模型进行用户认证了。但是需要注意的是,新的用户模型并不会自动创建用户,需要我们手动创建。
以下是一个示例:
from django.contrib.auth import get_user_model
# 获取用户模型
User = get_user_model()
# 创建一个新用户
user = User(email='example@example.com', phone_number='1234567890')
user.set_password(password)
user.save()
其中,我们使用 get_user_model()
方法获取用户模型,然后通过调用该模型的构造函数创建一个新的用户对象,并设置相应的字段值。
在 Django 中,向用户模型添加额外字段并不是一件困难的事情。只需要创建一个新的用户模型,继承 Django 自带的用户模型,添加自己需要的字段,更新 settings.py
文件,并进行数据库迁移即可。