2015-10-15 23 views
5

djangoでカスタムユーザモデルを使用しています。 最後に、スーパーユーザーがユーザーのパスワードを変更するための「AdminChangePasswordForm」が機能します。Djangoカスタムユーザadmin change_password

管理者から現在のパスワード変更リンク:myappの:ユーザーが404

答えを与えます。

オーバーライドget_urls

と正しいURLを持っているUserChangeFormをオーバーライドします。

+0

あなたをすることができます(あなたは-authtoolsジャンゴからNamedUserAdminのような任意のカスタムUSERADMINから継承する必要がある場合)

だから、解決策のいずれかでありますユーザーモデルを投稿しますか? –

+0

はい、それだけではありませんが、一般的な考えを見ることができます – straykiwi

答えて

2

あなたがget_urls()をオーバーライドする必要がありますので、それは、URL名を設定し1.7.xの "バグ"、および1.8.xに固定し、だそうです:

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,)) 
+0

いいえ私は1.8を使用しています。できるだけ早く試してみましょう。 – straykiwi

+0

URLはどこに行きますか?カスタムUserAdminに追加しましたが、URLを元に戻すことはできません。 "auth"を "users"(私のアプリ名)に変更しても同じことができます。また、1の静的引数には何がありますか? – straykiwi

+0

1.8を使用している場合や、ユーザーIDで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

ので、私も同様の問題がありました。 adminからユーザーパスワードを変更しようとすると、 "/ admin/accounts/siteuser/password /"(siteuserは私のカスタムユーザーモデルの名前です)に404エラーが表示されます: "user object with primary key u 'パスワード 'は存在しません。 この調査では、NamedUserAdminクラスを継承するためにdjango-authtools(1.4.0)のバグが原因で問題が発生していることがわかりました。

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