首页 > 解决方案 > Django自定义用户中密码重置期间的字段错误

问题描述

我的 django 应用程序中有一个自定义用户。当我在内置密码重置表单中提交电子邮件以重置密码时,我收到以下错误

/password_reset/ 处的 FieldError 无法将关键字“is_active”解析为字段。选项包括:活动、地址、管理员、简历、公司类别、公司描述、公司名称、公司站点、国家、名称、电子邮件、名字、毕业年份、id、最后登录、姓氏、链接、登录、市场、no_employees、密码、电话、照片、简历, 员工, 技术, 大学

我的自定义用户模型和模型管理器如下:


# -----------------------------  USER MANAGER -----------------------------
class UserManager(BaseUserManager):
    def create_user(self, email, password=None, is_active=True, is_staff=False, is_admin=False):
        if not email:
            raise ValueError("Users must have an email address")
        if not password:
            raise ValueError("Users must have a password")

        user_obj = self.model(
        email = self.normalize_email(email),
        )

        user_obj.staff = is_staff
        user_obj.admin = is_admin
        user_obj.active = is_active
        user_obj.set_password(password)
        user_obj.save(using=self._db)
        return user_obj


    def create_staffuser(self, email, password=None):
        user = self.create_user(
        email,
        password=password,
        staff=True,
        admin=True
        )
        return user


    def create_superuser(self, email, password=None):
        user = self.create_user(
        email,
        password=password,
        is_staff=True,
        is_admin=True
        )
        return user



# ----------------------------- CUSTOM USER -----------------------------

class User(AbstractBaseUser):
    email               = models.EmailField(max_length=255, unique=True)
    first_name          = models.CharField(max_length=255)
    last_name           = models.CharField(max_length=255)
    resume              =  models.FileField(upload_to='res/', blank=True, null=True, verbose_name='resume')
    photo               = models.ImageField(upload_to='pi/', default='img/default.png', blank=True, null=True)
    bio                 = models.CharField(max_length=1000)
    designation         = models.CharField(max_length=255)
    university          = models.CharField(max_length=255)
    company_name        = models.CharField(max_length=255)
    grad_year           = models.IntegerField(blank=False, null=True)
    phone               = models.CharField(max_length=255)
    address             = models.CharField(max_length=255)
    country             = models.CharField(max_length=255)
    company_category    = models.CharField(max_length=255, blank=False)
    company_desc        = models.CharField(max_length=800, blank=False)
    company_site        = models.CharField(max_length=255)
    no_employees        = models.IntegerField(blank=False, null=True)
    technologies        = models.CharField(max_length=255, blank=False)
    markets             = models.CharField(max_length=255, blank=False)
    linkedin            = models.CharField(max_length=255, blank=False)
    active              = models.BooleanField(default=True)
    staff               = models.BooleanField(default=False)
    admin               = models.BooleanField(default=False)


    USERNAME_FIELD = 'email'

    REQUIRED_FIELDS = []  #python manage.py createsuperuser asks for these fields

    objects = UserManager()

    def __str__(self):
        return self.email


    def get_full_name(self):
        if self.full_name:
            return self.full_name
        else:
            return self.email

    def get_short_name(self):
        return self.email

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

    def has_module_perms(self, app_label):
        return True


    @property
    def is_staff(self):
        return self.staff

    @property
    def is_admin(self):
        return self.admin

    @property
    def is_active(self):
        return self.active

如何解决?

标签: pythonhtmlcssdjangobootstrap-4

解决方案


推荐阅读