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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Django在重定向时找不到模式名称相关的知识,希望对你有一定的参考价值。

我正在研究django项目,我使用抽象用户模型将默认的django用户模型修改为员工的模型。

现在,在首次登录时,我需要重定向员工以更改密码页面,该密码页面是在EmployeeAdmin - get_urls方法中定义的。同样要覆盖默认登录行为,我必须覆盖默认的AdminSite,如下所示:

admin.朋友

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.朋友

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'不是有效的视图函数或模式名称。

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

答案

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

return redirect('admin:auth_user_password_change')

以上是关于Django在重定向时找不到模式名称的主要内容,如果未能解决你的问题,请参考以下文章

Auth::user 不会在重定向时保留

当 Cognito 重定向回我的 URL 时找不到刷新令牌

通过 django 提供静态文件时找不到页面

如何在Django中正确处理获取html输入值到视图和url模式?

在 Elastic Beanstalk 上部署时找不到模块 Django

错误:在 apache 上运行 django 时找不到目标 WSGI 脚本或无法统计