2015-10-15 16 views
5

Ich verwende erfolgreich ein benutzerdefiniertes Benutzermodell mit Django. Die letzte Sache, um zu arbeiten ist das "AdminChangePasswordForm" für Superuser, um jedes Benutzerpasswort zu ändern.Django benutzerdefinierter Benutzer admin change_password

derzeit das Passwort ändert Link von Admin: myapp: Benutzer gibt eine 404

die Antwort.

Aufschalten get_urls

und Überschreibung UserChangeForm die korrekte URL haben.

+0

Sie können posten Sie Ihr Benutzermodell? –

+0

ja, nicht alles, aber Sie können die allgemeine Idee sehen – straykiwi

Antwort

2

Es scheint, es ist ein "Bug" ist in 1.7.x und in 1.8.x festgelegt, die den URL-Namen festgelegt, so dass Sie sich get_urls() außer Kraft zu setzen:

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

Ok ich benutze 1,8. Versuchen Sie es so schnell wie möglich und lassen Sie es wissen – straykiwi

+0

Wohin geht die URL? Ich habe es dem benutzerdefinierten UserAdmin hinzugefügt, aber es kann die URL nicht umkehren. Selbst das Ändern der "Auth" zu "Benutzer" (mein App-Name) gibt das gleiche. Was ist mit dem statischen Argument von 1? – straykiwi

+0

Wenn Sie 1.8 verwenden oder keine Kennworterkennung durch Benutzer-ID benötigen, ist die Antwort für Sie nicht nützlich. Die "1" ist nur ein Beispiel. Kannst du deinen 'UserAdmin' posten? Der Link zum Ändern des Passworts: https://github.com/django/django/blob/stable/1.8.x/django/contrib/auth/forms.py#L103, UserChangeForm für UserAdmin: https://github.com/django /django/blob/stable/1.8.x/django/contrib/auth/admin.py#L57 – JimmyYe

0

So Ich hatte ähnliches Problem. Als ich versuchte, das Benutzerpasswort von admin zu ändern, bekam ich die URL "/ admin/accounts/siteuser/password /" (siteuser ist der Name meines benutzerdefinierten Benutzermodells) und 404 Fehler mit dieser Nachricht: "Benutzerobjekt mit Primärschlüssel u ' Passwort 'existiert nicht.' Die Untersuchung ergab, dass das Problem auf einen Fehler in django-authtools (1.4.0) zurückzuführen war, als ich die NamedUserAdmin-Klasse zum Erben verwendete.

So ist die Lösung entweder (wenn Sie von jedem benutzerdefinierten Admin wie NamedUserAdmin von django-authtools erben müssen):

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

oder erben nur aus Standard-django Admin:

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