Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django:无法解析关键字";处于活动状态'';打开/帐户/密码\u重置/_Django - Fatal编程技术网

Django:无法解析关键字";处于活动状态'';打开/帐户/密码\u重置/

Django:无法解析关键字";处于活动状态'';打开/帐户/密码\u重置/,django,Django,我正在尝试使用我的自定义用户模型实现Django的内置密码重置功能,但当我尝试在/accounts/password\u reset/提交电子邮件地址时遇到此错误: FieldError at /accounts/password_reset/ Cannot resolve keyword 'is_active' into field. Choices are: ... 异常位置: Exception Location: C:\Users\...\.virtualenvs\my_projec

我正在尝试使用我的自定义用户模型实现Django的内置密码重置功能,但当我尝试在/accounts/password\u reset/提交电子邮件地址时遇到此错误:

FieldError at /accounts/password_reset/
Cannot resolve keyword 'is_active' into field. Choices are: ...

异常位置:

Exception Location: C:\Users\...\.virtualenvs\my_project-IsNTW6sC\lib\site-packages\django\db\models\sql\query.py in names_to_path, line 1378
如果有人想查看,我可以提供完整的回溯,但它确实很长,而且都指向后端Django文件

这是模型。py:

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

        user = self.model(
                email = self.normalize_email(email)
            )
        user.staff = is_staff
        user.admin = is_admin
        user.active = is_active
        user.set_password(password)
        user.save(using=self._db)
        return user

    def create_staffuser(self, email, password=None):
        user = self.create_user(
                email,
                password=password,
                is_staff=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



class User(AbstractBaseUser):
    email = models.EmailField(max_length=254, unique=True)
    active = models.BooleanField(default=True)
    staff = models.BooleanField(default=False)
    admin = models.BooleanField(default=False)


    USERNAME_FIELD = 'email'
    REQUIRED_FIELDS = [] # USERNAME_field (email) and pw required by default
    objects = UserManager()

    def __str__(self):
        return self.email

    def get_full_name(self):
        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



class UserProfile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE, primary_key=True)
    username = models.CharField(max_length=200, unique=True, blank=False, validators=[
        RegexValidator(
            regex='^[a-z0-9_-]*$',
            message='Usernames can only contain letters, numbers, underscores, and dashes.'
            )
        ])
    first_name = models.CharField(max_length=200, blank=False)
    last_name = models.CharField(max_length=200, blank=False)
    city = models.CharField(max_length=30, blank=True)
    state_or_province = models.CharField(max_length=2, choices=all_choices, default='')
    bio = models.TextField(max_length=500, blank=True)
    date_joined = models.DateField(auto_now_add=True)
    cc_reference = models.CharField(max_length=200, default=False)
    event_list = ArrayField(models.IntegerField(), default=list)

    def _get_username(self):
        username = self.user.email
        return username

    def _get_firstname(self):
        firstname = self.user.email
        return firstname

    def _get_lastname(self):
        lastname = self.user.email
        return lastname

    def save(self, *args, **kwargs):
        if not self.username:
            self.username = self._get_username()
            self.first_name = self._get_firstname()
            self.last_name = self._get_lastname()
        super().save()

@receiver(post_save, sender=User)
def create_or_update_user_profile(sender, instance, created, **kwargs):
    if created:
        UserProfile.objects.create(user=instance)
    instance.userprofile.save()
感谢您的帮助。谢谢

编辑:

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

        user = self.model(
                email = self.normalize_email(email)
            )
        user.staff = is_staff
        user.admin = is_admin
        user.active = is_active
        user.set_password(password)
        user.save(using=self._db)
        return user

    def create_staffuser(self, email, password=None):
        user = self.create_user(
                email,
                password=password,
                is_staff=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



class User(AbstractBaseUser):
    email = models.EmailField(max_length=254, unique=True)
    active = models.BooleanField(default=True)
    staff = models.BooleanField(default=False)
    admin = models.BooleanField(default=False)


    USERNAME_FIELD = 'email'
    REQUIRED_FIELDS = [] # USERNAME_field (email) and pw required by default
    objects = UserManager()

    def __str__(self):
        return self.email

    def get_full_name(self):
        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



class UserProfile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE, primary_key=True)
    username = models.CharField(max_length=200, unique=True, blank=False, validators=[
        RegexValidator(
            regex='^[a-z0-9_-]*$',
            message='Usernames can only contain letters, numbers, underscores, and dashes.'
            )
        ])
    first_name = models.CharField(max_length=200, blank=False)
    last_name = models.CharField(max_length=200, blank=False)
    city = models.CharField(max_length=30, blank=True)
    state_or_province = models.CharField(max_length=2, choices=all_choices, default='')
    bio = models.TextField(max_length=500, blank=True)
    date_joined = models.DateField(auto_now_add=True)
    cc_reference = models.CharField(max_length=200, default=False)
    event_list = ArrayField(models.IntegerField(), default=list)

    def _get_username(self):
        username = self.user.email
        return username

    def _get_firstname(self):
        firstname = self.user.email
        return firstname

    def _get_lastname(self):
        lastname = self.user.email
        return lastname

    def save(self, *args, **kwargs):
        if not self.username:
            self.username = self._get_username()
            self.first_name = self._get_firstname()
            self.last_name = self._get_lastname()
        super().save()

@receiver(post_save, sender=User)
def create_or_update_user_profile(sender, instance, created, **kwargs):
    if created:
        UserProfile.objects.create(user=instance)
    instance.userprofile.save()
由于下面的答案,我修复了密码重置问题。但是,我现在无法将超级用户登录到管理页面。新的用户模型如下。我没有更改UserManager:

class User(AbstractBaseUser):
    email = models.EmailField(max_length=254, unique=True)
    is_active = models.BooleanField(default=True)
    is_staff = models.BooleanField(default=False)
    is_admin = models.BooleanField(default=False)


    USERNAME_FIELD = 'email'
    REQUIRED_FIELDS = [] # USERNAME_field (email) and pw required by default
    objects = UserManager()

    def __str__(self):
        return self.email

    def get_full_name(self):
        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

您的模型定义了字段
活动
管理
,和
职员
,而不是
活动您的模型定义了字段
活动
管理
职员
而不是
处于活动状态

在类
MyUser
中,可能有三个功能:

def是工作人员(自身):
返回self.is_工作人员
def是_管理员(自我):
返回self.is_admin
def处于活动状态(自):
return self.u是否处于活动状态
我认为重复这些名字会造成冲突

  • 如果可能,从您的自定义
    用户中删除
    员工
  • 删除sudsequent函数:不需要(注意:仅函数,而不是对象)
def处于活动状态(自):
return self.u是否处于活动状态
  • 重命名u/m函数(您可以使用is_人员(自身)调用is_管理员):
def是工作人员(自身):
返回self.is_admin
这将消除冲突,你们两个问题都将得到解决

注意:您还必须从
MyUserManager
类中删除
createstaffuser()
函数,并且必须更改
admin
active
(无论您在何处使用它们)to
分别处于活动状态
处于活动状态
。最后,您必须从管理员、表单和模型中删除员工


我希望这会有所帮助。

在类
MyUser
中,可能有三个函数:

def是工作人员(自身):
返回self.is_工作人员
def是_管理员(自我):
返回self.is_admin
def处于活动状态(自):
return self.u是否处于活动状态
我认为重复这些名字会造成冲突

  • 如果可能,从您的自定义
    用户中删除
    员工
  • 删除sudsequent函数:不需要(注意:仅函数,而不是对象)
def处于活动状态(自):
return self.u是否处于活动状态
  • 重命名u/m函数(您可以使用is_人员(自身)调用is_管理员):
def是工作人员(自身):
返回self.is_admin
这将消除冲突,你们两个问题都将得到解决

注意:您还必须从
MyUserManager
类中删除
createstaffuser()
函数,并且必须更改
admin
active
(无论您在何处使用它们)to
分别处于活动状态
处于活动状态
。最后,您必须从管理员、表单和模型中删除员工


我希望这会有所帮助。

尝试将is\U superuser字段添加到用户模型中,然后迁移更改


之后,使用terminal/cmd创建超级用户,然后尝试以超级用户身份登录agian

尝试将is\u超级用户字段添加到用户模型中,然后迁移更改


之后,使用terminal/cmd创建超级用户,然后尝试以超级用户agian的身份登录。在我的例子中,我刚刚将字段
active
重命名为
is\u active
,并删除了
is\u active
@属性函数。 然后,当我
makemigrations
时,它问我是否要将
active
字段重命名为
is\u active
,我点击
Y
进行迁移。 最后,我将更改迁移到数据库。
它没有任何错误。

在我的例子中,我刚刚将字段
active
重命名为
is\u active
,并删除了
is\u active
@属性函数。 然后,当我
makemigrations
时,它问我是否要将
active
字段重命名为
is\u active
,我点击
Y
进行迁移。 最后,我将更改迁移到数据库。
它工作正常。

您是否更改了
用户
模型?如果没有,这不应该是
是活动的
是工作人员
,等等。而不是
活动的
工作人员
,等等。Aw垃圾看起来像我的模型。py被切断了。我会编辑帖子。我收回它-只有第一行丢失了。但就我所知,哟你从未将
用户管理器
模型设置为你的新
用户配置文件
。我真的没有跟踪你。你能给我看一个你认为我需要更改的示例/片段吗?谢谢!你更改了
用户
模型吗?如果没有,这不应该是
是活动的
是工作人员
,等等。我将编辑这篇文章。我收回它——只有第一行丢失了。但据我所知,你从来没有将
用户管理器的
模型设置为你的新
用户配置文件
。我真的没有跟踪你。你能辩诉吗请给我看一个你认为我需要更改的示例/片段?谢谢!当我将
活动
更改为
活动
时,我仍然会收到错误。即使我创建一个新字段
活动
,然后运行
manage.py makemigrations
,它只会注册我删除的
活动
。它不会注册