【问题标题】:Custom User model error: AttributeError: 'CustomUser' object has no attribute 'is_anonymous'自定义用户模型错误:AttributeError:“CustomUser”对象没有属性“is_anonymous”
【发布时间】:2019-12-18 03:46:58
【问题描述】:

尝试设置扩展基本用户的自定义用户模型。有些用户会有登录信息,有些则没有,但我仍然希望所有用户都登录。这就是我认为错误所说的。

在默认的 Django 模型中,他们被记录了,但现在一些用户只有 IP 地址和用户名。其他用户将获得更多信息,例如电子邮件等。

遇到此错误:

AttributeError: 'CustomUser' object has no attribute 'is_anonymous'

这是我的自定义用户类:

class MyUserManager(BaseUserManager):
    def create_user(first_name, last_name, address1, state, zipcode, email, username, password):

        user=self.model(
            first_name = first_name,
            last_name = last_name,
            address1 = address1,
            zipcode = zipcode,
            state = state,
            email=email, 
            username = username,
            password = password
            )
        user.is_superuser = False
        user.is_admin = False
        user.is_staff = False
        user.set_password(password)
        user.save(using=self._db)
        return user

    def create_user(self, email, password=None, **extra_fields):
        extra_fields.setdefault('is_superuser', False)
        return self._create_user(email, password, **extra_fields)

    def create_superuser(self, email, password, **extra_fields):
        extra_fields.setdefault('is_superuser', True)
        if extra_fields.get('is_superuser') is not True:
            raise ValueError('Superuser must have is_superuser=True.')

        return self._create_user(email, password, **extra_fields)

class CustomUser(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    first_name = models.CharField(max_length=25
                )
    last_name = models.CharField(max_length=25
                )
    address1 = models.CharField(null=True, max_length=100, blank=True)
    zipcode = models.CharField(max_length=10, null=True,blank=True)
    state = models.CharField(null=True, max_length=2, blank=True)
    email = models.EmailField(max_length = 250)
    username = models.CharField(max_length = 25)
    password = models.CharField(max_length =25,
        null=True)

    objects=MyUserManager()
    USERNAME_FIELD = 'username'
    REQUIRED_FIELDS = ['first_name', 'last_name', 'username', 'email', 'password', 'zipcode']

    def has_perm(self, perm, obj=None):
        return True

    def has_module_perms(self, app_label):
        return True

    def __str__(self):
        return f'{self.first_name} ({self.last_name}) ({self.email})'

我怎样才能让它工作?任何帮助都会很棒!

【问题讨论】:

    标签: django django-models django-custom-user


    【解决方案1】:

    您可以简单地将这个property 添加到您的CustomUser 模型中:

    @property
    def is_anonymous(self):
        """
        Always return False. This is a way of comparing User objects to
        anonymous users.
        """
        return False
    

    【讨论】:

      【解决方案2】:

      您的 CustomUser 类也必须从 AbstractBaseUser 继承。您没有将其包含在代码中。 models.Model 那时就没有必要了。 首先你必须这样做:

      from django.contrib.auth.models import AbstractBaseUser
      

      然后

      class CustomUser(AbstractBaseUser):
      ###
      

      【讨论】:

      • 我要在这里补充一点,models.Model 不是必需的,只需将 AbstractBaseUser 传递给 CustomUser 类就足够了
      猜你喜欢
      • 1970-01-01
      • 2018-03-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-10-15
      • 1970-01-01
      • 1970-01-01
      • 2016-04-03
      相关资源
      最近更新 更多