添加到 auth_user [重复]
Posted
技术标签:
【中文标题】添加到 auth_user [重复]【英文标题】:Add to auth_user [duplicate] 【发布时间】:2020-09-01 23:52:49 【问题描述】:我有这个程序,它从 auth_user 表和 django 数据库中获取大部分数据。我不知道如何向其中添加新列并使其实际工作,因为当我这样做时它无法识别它。有谁知道如何在默认 django 数据库的 auth_user 表中添加一列。
【问题讨论】:
【参考方案1】:我认为这是 Django 文档站点上详细记录的部分。我猜你正在尝试创建custom user model。但我推荐你extend user model。扩展默认用户模型将为您提供更大的灵活性。我希望这两个链接就足够了。如果没有,请评论我缺少要覆盖的部分。
【讨论】:
【参考方案2】:您可以覆盖默认用户模型或使用 OneToOneField 关系扩展用户模型以满足此要求。
1.我将向您展示如何自定义用户模型。
from django.contrib.auth.models import AbstractBaseUser, PermissionsMixin
from core.util.validators import UnicodeUsernameValidator
from .manager import UserManager
class User(AbstractBaseUser, PermissionsMixin):
"""
Username, Email and password are required. Other fields are optional.
"""
username_validator = UnicodeUsernameValidator()
username = models.CharField(
_('username'),
max_length=150,
unique=True,
help_text=_(
'150 characters or fewer. Letters, digits and @/./+/-/_ only.'),
validators=[username_validator],
error_messages=
'unique': _("A user with that username already exists."),
,
null=True,
default=None
)
email = models.EmailField(
_('email address'),
blank=False,
unique=True,
error_messages=
'unique': _("A user with that email address already exists."),
,
)
is_staff = models.BooleanField(
_('staff status'),
default=False,
help_text=_(
'Designates whether the user can log into this admin site.'),
)
is_active = models.BooleanField(
_('active'),
default=True,
help_text=_(
'Designates whether this user should be treated as active. '
'Unselect this instead of deleting accounts.'
),
)
date_joined = models.DateTimeField(_('date joined'), default=timezone.now)
objects = UserManager()
EMAIL_FIELD = 'email'
USERNAME_FIELD = 'username'
REQUIRED_FIELDS = ['email']
class Meta:
verbose_name = _('user')
verbose_name_plural = _('users')
permissions = (
('user_permission', "User Permission"),
('admin_permission', "Admin Permission"),
)
这就像他们在用户模型中的副本。在这里,您可以添加新字段。
确保在 settings.py 中注册它
AUTH_USER_MODEL = 'userapp.User'
你可以像
一样访问extra_fieldsuser.extra_field
2。我将向您展示如何使用 OneToOneField 进行扩展。
from django.contrib.auth import get_user_model
class Profile(models.Model):
user = models.OneToOneField(get_user_model(), on_delete=models.CASCADE)
...
# Extra fields Here
然后你可以访问额外的字段
user.profile.extra_field
【讨论】:
我可以在其中添加像 max_char 这样的额外字段以上是关于添加到 auth_user [重复]的主要内容,如果未能解决你的问题,请参考以下文章
Django+postgres auth_user 重复键值违反唯一约束“auth_user_username_key”
在 django 中将自定义字段添加到 auth_user 表