Django自定义用户admin change_password

时间:2015-10-15 21:47:59

标签: python django

我成功使用django的自定义用户模型。 最后一件工作是“AdminChangePasswordForm”,供超级用户更改任何用户密码。

目前来自admin:myapp:user的更改密码链接提供了404

答案。

覆盖get_urls

并覆盖UserChangeForm以获取正确的网址。

2 个答案:

答案 0 :(得分:2)

它似乎是一个" bug"在1.7.x中,并在1.8.x中设置,其中设置了网址名称,因此您必须覆盖get_urls()

from django.contrib.auth.admin import UserAdmin as AuthUserAdmin
from django.conf.urls import url


class UserAdmin(AuthUserAdmin):
    def get_urls(self):
        return [
            url(r'^(.+)/password/$', self.admin_site.admin_view(self.user_change_password), name='auth_user_password_change'),
        ] + super(UserAdmin, self).get_urls()

URL:

password_change_url = urlresolvers.reverse('admin:auth_user_password_change', args=(1,))

答案 1 :(得分:0)

所以我有类似的问题。当我尝试从管理员更改用户密码时,我将URL设置为“/ admin / accounts / siteuser / password /”(siteuser是我的自定义用户模型的名称),并且此消息出现404错误:“带有主键的用户对象u”密码'不存在。“ 调查显示问题是由于django-authtools(1.4.0)中的错误导致我使用NamedUserAdmin类继承。

所以解决方案是(如果您需要从django-authtools继承任何自定义UserAdmin,如NamedUserAdmin):

from django.contrib.auth.forms import UserChangeForm
from authtools.admin import NamedUserAdmin
class SiteUserAdmin(NamedUserAdmin):
    ...
    form = UserChangeForm
    ...

或者只是从默认的django UserAdmin继承:

from django.contrib.auth.admin import UserAdmin
class SiteUserAdmin(UserAdmin):
    pass