2012-09-18 121 views
5

Tengo una aplicación django en la que quiero deshabilitar la eliminación del usuario en el administrador. Intenté desactivar las acciones y configurar el permiso de eliminación en falso. Pero ninguno de ellos funcionó.Administrador de Django - Deshabilitar la eliminación del usuario

from django.contrib.auth.models import User 

class UserProfileAdmin(UserAdmin): 
    actions = None 

O

def has_delete_permission(self, request): 
     return False 

O

def get_actions(self, request): 
     actions = super(UserProfileAdmin, self).get_actions(request) 
     if 'delete_selected' in actions: 
      del actions['delete_selected'] 
     return actions 

admin.site.unregister(User) 
admin.site.register(User, UserProfileAdmin) 

Pero cuando estoy usando el UserAdmin añadir una línea a la información del usuario, que está funcionando bien. Así que sugiéreme una forma de desactivar la eliminación del usuario en django admin. Gracias por adelantado.

+1

Está anulando 'has_add_permission' para deshabilitar la eliminación? Además, es mejor desactivar la acción de eliminación globalmente y agregarla explícitamente donde sea que se requiera – okm

+0

Lo siento. En realidad es 'has_delete_permission'. Cometí un error aquí. Y sobre la desactivación de la acción de eliminación, todo el sitio es una buena idea. Pero cuando abrimos una entrada de usuario, habrá una opción de eliminar en la fila de envío (fila del botón Guardar). ¿Cómo deshabilitarlo? – arulmr

Respuesta

16

Anulación ModelAdmin.has_delete_permission debe hacer el truco, su firma invocación es incorrecta, se le falta un obj parámetro

class UserProfileAdmin(UserAdmin): 
    def has_delete_permission(self, request, obj=None): # note the obj=None 
     return False 

Por otra parte, simplemente return False impide que todo el personal incluyendo el administrador de la eliminación de elementos en el Django de administración, es posible que desee simplemente modifique los permisos User/Group para evitar que el personal no desee que eliminen un User(), eliminando sus permisos delete_userprofile y delete_user.

+0

Quiero deshabilitar el permiso de eliminación para super_user. Además 'has_delete_permission' no mostró ningún efecto. – arulmr

+0

@arulmr es extraño, ¿ha registrado 'UserProfileAdmin' correctamente y no hay anulación de las plantillas de administrador? Intenta poner un 'import pdb; pdb.set_trace() 'en' has_delete_permission() 'antes de la cláusula' return' para asegurar que se invoque. – okm

+0

estoy dando mi código de abajo: ' de django.contrib.auth.models importación de usuarios de django.contrib.auth.admin UserAdmin importación clase UserProfileAdmin (UserAdmin): def has_delete_permission (auto, solicitud, obj = Ninguno): import pdb; pdb.set_trace(); return False admin.site.unregister (Usuario) admin.site.register (User, UserProfileAdmin) ' Pero ** pdb ** no fue invocado. ¿Cuál es el error aquí? Creo que el formato del código no será bueno en este comentario. Gracias por adelantado. – arulmr

-2

Si su objetivo es eliminar permanentemente el botón "Eliminar" de la parte inferior de todos los formularios de administración de cambios, puede hacerlo modificando el archivo .../django/contrib/admin/templatetags/admin_modify.py.

En particular, reemplazar las líneas:

'show_delete_link': (not is_popup and context['has_delete_permission'] 
          and (change or context['show_delete'])), 

con:

'show_delete_link': False, 

y no hay formas de cambios del administrador debe mostrar el botón Borrar en la parte inferior izquierda.

+2

La edición de los archivos fuente django afectará a todas las demás aplicaciones. Pero quiero lograr esto solo en mi aplicación actual. – arulmr

+0

Sí, ¿y si quieres actualizar tu django? –

+0

Buenos puntos. Espero que mi respuesta haya sido golpeada hasta la muerte. –

Cuestiones relacionadas