我是 django 的初学者,我正在研究用户身份验证。我正在使用 Abstractuser
和默认的 User
模型来创建用户。但是,收集了很多对我的项目没有用的不必要信息。
这是我的models.py:
from django.db import models
from django.contrib.auth.models import AbstractUser
class User(AbstractUser):
pass
这些是生成的字段:
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('password', models.CharField(max_length=128, verbose_name='password')),
('last_login', models.DateTimeField(blank=True, null=True, verbose_name='last login')),
('is_superuser', models.BooleanField(default=False, help_text='Designates that this user has all permissions without explicitly assigning them.', verbose_name='superuser status')),
('username', models.CharField(error_messages={'unique': 'A user with that username already exists.'}, help_text='Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only.', max_length=150, unique=True, validators=[django.contrib.auth.validators.UnicodeUsernameValidator()], verbose_name='username')),
('first_name', models.CharField(blank=True, max_length=150, verbose_name='first name')),
('last_name', models.CharField(blank=True, max_length=150, verbose_name='last name')),
('email', models.EmailField(blank=True, max_length=254, verbose_name='email address')),
('is_staff', models.BooleanField(default=False, help_text='Designates whether the user can log into this admin site.', verbose_name='staff status')),
('is_active', models.BooleanField(default=True, help_text='Designates whether this user should be treated as active. Unselect this instead of deleting accounts.', verbose_name='active')),
('date_joined', models.DateTimeField(default=django.utils.timezone.now, verbose_name='date joined')),
('groups', models.ManyToManyField(blank=True, help_text='The groups this user belongs to. A user will get all permissions granted to each of their groups.', related_name='user_set', related_query_name='user', to='auth.Group', verbose_name='groups')),
('user_permissions', models.ManyToManyField(blank=True, help_text='Specific permissions for this user.', related_name='user_set', related_query_name='user', to='auth.Permission', verbose_name='user permissions')),
我希望在我的项目中出现的唯一字段是:
密码
、用户名
、first_name
、last_name
、email
& date_joined
.
我搜索过,只找到了删除 username
并将 email
指定为默认值的方法。
如何自定义用户模型以包含在我的项目中使用的字段? 感谢任何帮助。
编辑:关于通过email
进行身份验证我没有说什么。我想继续使用 username
作为默认值,只是删除不必要的字段。
最佳答案
还有另一个抽象允许你想要的,它是 AbstractBaseUser
那里都有解释:
The easiest way to construct a compliant custom user model is to inherit from AbstractBaseUser. AbstractBaseUser provides the core implementation of a user model, including hashed passwords and tokenized password resets. You must then provide some key implementation details
所以 AbstractUser 也使用 AbstractBaseUser 作为开始,然后添加东西。
请注意,如果您不添加 PermissionsMixin(它会添加组和权限字段),admin 将变得不可用,其他几个与 Django 的默认授权框架相关的包也是如此。
但是,如果您不关心这些,您可以自由地只实现您想要的字段。
关于django 使用 AbstractUser 删除模型中不需要的用户字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67452838/