自定义用户模型错误:AttributeError:'CustomUser'对象没有属性'is_anonymous' [英] Custom User model error: AttributeError: 'CustomUser' object has no attribute 'is_anonymous'

查看:333
本文介绍了自定义用户模型错误:AttributeError:'CustomUser'对象没有属性'is_anonymous'的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

尝试建立扩展基本用户的自定义用户模型.有些用户将具有登录信息,有些则没有,但是我仍然希望所有用户都登录.我认为这就是错误所在.

Trying to set up a custom user model that extends the base user. Some user will have login information and some will not, but I still want all users logged. That's what I think the error is saying.

在默认的Django模型中,他们已登录,但是现在某些用户仅拥有IP地址和用户名.其他用户将获得更多信息,例如电子邮件等.

In the default Django model they were logged, but now some users will just have just IP address and username. Other users will have more information like email, etc.

得到这个错误:

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

这是我的自定义用户类别:

Here is my custom user class:

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})'

我如何才能使它正常工作?任何帮助都会很棒!

How might I get this to work? Any help would be great!

推荐答案

您的CustomUser类也必须继承自AbstractBaseUser.您没有在代码中包含它. 首先,您必须做:

Your CustomUser class must inherits from AbstractBaseUser too. You didn't include it in your code. First you must do :

from django.contrib.auth.models import AbstractBaseUser

然后

class CustomUser(models.Model,AbstractBaseUser):
###

这篇关于自定义用户模型错误:AttributeError:'CustomUser'对象没有属性'is_anonymous'的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆