2015-10-15 18 views
5

Sto utilizzando con successo un modello utente personalizzato con django. L'ultima cosa per funzionare è "AdminChangePasswordForm" per i superutenti per cambiare la password di qualsiasi utente.Django utente personalizzato admin change_password

attualmente il link modifica della password da admin: myapp: l'utente dà un 404

La risposta.

get_urls Override

e di override UserChangeForm di avere l'URL corretto.

+0

può voi pubblica il tuo modello utente? –

+0

sì, non tutto ma si vede l'idea generale – straykiwi

risposta

2

sembra si tratta di un "bug" in 1.7.x, e fissato in 1.8.x, che ha fissato il nome dell'URL, quindi bisogna ignorare 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,)) 
+0

Ok sto usando 1.8. Provalo ASAP e ti faccio sapere – straykiwi

+0

Dove va l'URL? L'ho aggiunto a UserAdmin personalizzato ma non è possibile invertire l'URL. anche cambiare "auth" in "users" (il nome della mia app) dà lo stesso. Inoltre, che cosa è con l'argomento statico di 1? – straykiwi

+0

Se si utilizza 1.8 o non è necessario ottenere password_change_url per id utente, la risposta non è utile. "1" è solo un esempio. Puoi pubblicare il tuo 'UserAdmin'? Il link della password di modifica: https://github.com/django/django/blob/stable/1.8.x/django/contrib/auth/forms.py#L103, UserChangeForm per UserAdmin: https://github.com/django /django/blob/stable/1.8.x/django/contrib/auth/admin.py#L57 – JimmyYe

0

Così Ho avuto un problema simile. Quando ho provato a cambiare la password utente da admin ho ricevuto url su "/ admin/accounts/siteuser/password /" (siteuser è il nome del mio modello utente personalizzato) e 404 errore con questo messaggio: "oggetto utente con chiave primaria u" la password "non esiste". L'inchiesta ha dimostrato che il problema era dovuto a un errore in django-authtools (1.4.0), in quanto utilizzavo la classe NamedUserAdmin da cui ereditare.

Quindi la soluzione è o (se avete bisogno di ereditare da qualsiasi UserAdmin personalizzato come NamedUserAdmin da django-authtools):

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

o semplicemente ereditare dal default django UserAdmin:

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