【问题标题】:Add to auth_user [duplicate]添加到 auth_user [重复]
【发布时间】:2020-09-01 23:52:49
【问题描述】:

我有这个程序,它从 auth_user 表和 django 数据库中获取大部分数据。我不知道如何向其中添加新列并使其实际工作,因为当我这样做时它无法识别它。有谁知道如何在默认 django 数据库的 auth_user 表中添加一列。

【问题讨论】:

    标签: django database


    【解决方案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 这样的额外字段
      猜你喜欢
      • 2017-06-02
      • 2013-10-19
      • 1970-01-01
      • 2015-08-28
      • 2015-09-18
      • 2011-10-21
      • 2012-09-14
      • 2019-01-28
      • 2017-09-28
      相关资源
      最近更新 更多