Django 创建用户时为该用户新创建一个表,在models文件中应该怎么写
时间: 2023-07-15 18:10:41 浏览: 103
django创建超级用户时指定添加其它字段方式
在 Django 中创建一个新的用户表,可以通过扩展 Django 提供的 AbstractBaseUser 和 PermissionsMixin 类来实现。以下是一个示例:
```python
from django.contrib.auth.models import AbstractBaseUser, BaseUserManager, PermissionsMixin
from django.db import models
class CustomUserManager(BaseUserManager):
def create_user(self, email, password=None, **extra_fields):
"""
创建并保存一个新的用户
"""
if not email:
raise ValueError('必须提供一个电子邮件地址')
user = self.model(
email=self.normalize_email(email),
**extra_fields
)
user.set_password(password)
user.save(using=self._db)
return user
def create_superuser(self, email, password=None, **extra_fields):
"""
创建并保存一个新的超级用户
"""
extra_fields.setdefault('is_staff', True)
extra_fields.setdefault('is_superuser', True)
return self.create_user(email, password, **extra_fields)
class CustomUser(AbstractBaseUser, PermissionsMixin):
email = models.EmailField(unique=True)
name = models.CharField(max_length=30)
is_active = models.BooleanField(default=True)
is_staff = models.BooleanField(default=False)
USERNAME_FIELD = 'email'
REQUIRED_FIELDS = ['name']
objects = CustomUserManager()
def __str__(self):
return self.email
```
在上面的示例中,我们定义了一个名为 `CustomUser` 的模型,它继承自 `AbstractBaseUser` 和 `PermissionsMixin`。我们还定义了一个 `CustomUserManager` 类,它继承自 `BaseUserManager`,并包含创建用户和创建超级用户的方法。
注意,在上面的示例中,我们将 `email` 字段用作 `USERNAME_FIELD`,这意味着用户将使用其电子邮件地址进行身份验证而不是用户名。`REQUIRED_FIELDS` 列表中包含一个名为 `name` 的字段,这意味着在创建用户时必须提供该字段。
最后,我们需要在 `settings.py` 文件中指定我们的用户模型:
```python
AUTH_USER_MODEL = 'myapp.CustomUser'
```
其中,`myapp` 是包含我们的用户模型的应用程序的名称。
阅读全文