2015-10-15 115 views
5

我成功地使用自定义用户模型与Django。 最后一件工作是超级用户更改任何用户密码的“AdminChangePasswordForm”。Django自定义用户管理change_password

目前从管理员更改密码链接:MYAPP:用户给出了404

答案。

覆盖get_urls

和覆盖UserChangeForm有正确的URL。

+0

你能发布你的用户模型? –

+0

是的,不是全部,但你可以看到总体思路 – straykiwi

回答

2

看来它在1.7.x一个 “错误”,并固定在1.8.x,其中设置的URL名称,这样你就必须重写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() 

网址:

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

好吧,我正在使用1.8。将尽快尝试,并让您知道 – straykiwi

+0

URL在哪里去?我将它添加到自定义UserAdmin,但它不能反转URL。即使将“身份验证”更改为“用户”(我的应用程序名称)也一样。另外,什么是1的静态参数? – straykiwi

+0

如果您使用1.8或者不需要通过用户标识获取password_change_url,则答案对您无用。 “1”只是一个例子。你可以发布你的'UserAdmin'吗?更改密码链接:https://github.com/django/django/blob/stable/1.8.x/django/contrib/auth/forms.py#L103,UserAdmin的UserChangeForm:https://github.com/django /django/blob/stable/1.8.x/django/contrib/auth/admin.py#L57 – JimmyYe

0

所以我有类似的问题。当我试图从管理员更改用户密码时,我将URL设置为“/ admin/accounts/siteuser/password /”(siteuser是我的自定义用户模型的名称),404错误信息为:“user key with uu u u'密码“不存在”。 调查显示,问题是由于django-authtools(1.4.0)中的错误,因为我使用NamedUserAdmin类来继承。

所以解决方法是,(如果你需要从任何自定义UserAdmin像NamedUserAdmin继承的Django authtools):

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