2011-11-13 16 views
6

estoy usando un administrador de usuario personalizada por:Utilización de administración se rompe la costumbre de los usuarios cambian de forma contraseña en administración de Django

class CustomUserAdmin(admin.ModelAdmin): 
    model = User 
    ... 
admin.site.unregister(User) 
admin.site.register(User, CustomUserAdmin) 

pero cuando intento de cambiar la contraseña a través de la página de administración que reciben una 404.

user object with primary key u'4/password' does not exist. 

Volviendo al administrador de usuario predeterminado funciona bien.

Respuesta

16

El valor predeterminado UserAdmin en django.contrib.auth.admin implementa una gran cantidad de funcionalidades, incluida la página de cambio de contraseña.

Su CustomUserAdmin debe subclase UserAdmin en lugar de admin.ModelAdmin, a menos que desee volver a implementar esa funcionalidad usted mismo.

class CustomUserAdmin(UserAdmin): 
    # as an example, this custom user admin orders users by email address 
    ordering = ('email',) 

admin.site.unregister(User) 
admin.site.register(User, CustomUserAdmin) 
+0

Esto funcionó para mí, pero el tener este código: exclude = ('is_superuser', 'user_permissions') lo rompe. – wenbert

+1

@wenbert usted necesita anular 'conjuntos de campo'. Tanto is_superuser como user_permissions se incluyen en 'UserAdmin.fieldsets'. No puede incluir un campo en conjuntos de campo y luego excluirlo. – Alasdair

1

también:

Según the docs, si se hereda de AbstractBaseUser no se puede utilizar el UserAdmin predeterminado; o, dicho de otro modo, puede hacerlo, pero solo funcionará un subconjunto de la funcionalidad: cambiar la contraseña existente podría funcionar, pero agregar un nuevo usuario arrojará excepciones.

Cuestiones relacionadas