我在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'不是有效的视图函数或模式名称。
我不知道为什么django找不到在EmployeeAdmin的get_urls()方法中定义的命名url。
答案 0 :(得分:2)
由于您要将URL添加到模型管理类,因此需要包含admin
命名空间以对其进行反转。
return redirect('admin:auth_user_password_change')