添加到 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_fields
user.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 表

如何获取当前Windows登录用户全名而不是域名[重复]

如何使用 django 向默认 auth_user 模型添加额外的模型字段

向 auth_user 表添加只能具有选择性值的字段

如何将重复键添加到字典中