2015-10-15 142 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