python - Django 在重定向时找不到模式名称

标签 python django django-models django-forms django-admin

我正在开发 django 项目,我已使用 AbstractUser 模型将默认的 django 用户模型修改为员工模型。

现在,在他们第一次登录时,我需要重定向员工的更改密码页面,其 Url 在 EmployeeAdmin - get_urls 方法中定义。另外,为了覆盖默认的登录行为,我必须覆盖默认的 AdminSite,如下所示:

admin.py

class MyAdminSite(AdminSite):
    login_form = AdminLoginForm


admin_site = HRMSAdminSite(name='My-admin')


@admin.register(Employee, site=admin_site)
class EmployeeAdmin(admin.ModelAdmin):
    def get_urls(self):
        return [
            path(
                '<id>/password/',
                self.admin_site.admin_view(self.user_change_password),
                name='auth_user_password_change',
            ),
        ] + super().get_urls()

    def user_change_password(self, request, id, form_url=''):
        pass

在我的 AdminLoginForm 上,我检查用户的首次登录:

forms.py

class AdminLoginForm(AuthenticationForm):

    def confirm_login_allowed(self, user):
        # user.last_login is blank if this is first login for this user
        if not user.last_login:
            return redirect('auth_user_password_change')

但是,当运行上面的代码时,我收到以下错误:

未找到“auth_user_password_change”的反向操作。 “auth_user_password_change”不是有效的 View 函数或模式名称。

我不知道为什么 django 找不到指定的 url,即在 EmployeeAdmin 的 get_urls() 方法中定义的。

最佳答案

由于您要将 URL 添加到模型管理类,因此需要包含 admin 命名空间来反转它。

return redirect('admin:auth_user_password_change')

关于python - Django 在重定向时找不到模式名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47866193/

相关文章:

python - 根据键翻译numpy数组中的每个元素

python - 如何为 python 2.7 安装 pip?

python - 使用 Django Rest 保存 Base64ImageField 类型将其保存为原始图像。如何将其转换为普通图像

python - factory_boy 对象似乎缺少主键

python - 使用基于索引的条件对 MultiIndex DataFrame 进行切片

django - 如何使用 Django 检查 firebase 数据库中的 child 是否存在?

django - 错误 apache 配置错误 : couldn't perform authentication. AuthType 未设置!:/在 centos 6

python - Django-ForeignKey-如何正确使用它?

django - 在 Django 中为两种类型的用户子类化 AbstractUser

python - Unicode解码错误: 'ascii' codec can't decode byte 0xe2 in position 35: ordinal not in range(128)