2010-10-28 18 views

Respuesta

9

bien es probable que esté utilizando:

AdminSite.disable_action('delete_selected') 

Para mayor control de simplemente poner en práctica su propia administración y fijar sus acciones a lo que usted necesita:

class MyModelAdmin(admin.ModelAdmin): 
    actions = ['whatever', 'actions'] 

Referencia: http://docs.djangoproject.com/en/dev/ref/contrib/admin/actions/#disabling-a-site-wide-action

+4

no funciona. No afecta la página individual. Solo deshabilita la acción cuando se busca en la lista. –

10

sólo tiene que desactivar el permiso yourapp.delete_yourmodel para ese usuario o el grupo al que pertenece.

+0

Esto no funciona en Django 1.3 y versiones anteriores, debido a este problema https://code.djangoproject.com/ticket/8060 Se corrigió en Django 1.4. –

100

simple :)

class DeleteNotAllowedModelAdmin(admin.ModelAdmin): 
    # Other stuff here 
    def has_delete_permission(self, request, obj=None): 
     return False 
+8

La acción todavía está en el menú desplegable, pero arroja un 403 prohibido. Para limpiarlo, debes seguir mi solución. Además haz esto también. – radtek

+0

¿Desea eliminar el menú desplegable también, en caso de que, siga la solución de radtek – thevangelist

+1

@radtek Está en lo correcto, que la acción seguirá en el menú desplegable, pero el OP sí dijo que ya logró inhabilitar la acción de eliminar eliminada . Entonces esto es todo lo que es necesario. – McKay

61

Si desea desactivar uno específico que no se haga costumbre esto. En django 1.6.6 tuve que extender get_actions plus define has_delete_permission. La solución has_delete_permission no deshacerse de la acción en el menú desplegable para mí:

class MyModelAdmin(admin.ModelAdmin): 

    .... 

    def get_actions(self, request): 
     #Disable delete 
     actions = super(MyModelAdmin, self).get_actions(request) 
     del actions['delete_selected'] 
     return actions 

    def has_delete_permission(self, request, obj=None): 
     #Disable delete 
     return False 

no incluirlo en actions = ['your_custom_action'], sólo funciona para las acciones personalizadas (DEFS) que haya definido para ese modelo. La solución AdminSite.disable_action('delete_selected'), lo desactiva para todos los modelos, por lo que tendría que incluir explícitamente más adelante por cada modelAdmin

+1

No entiendo por qué devolver has_delete_permission como falso no elimina la acción. Tenía que hacer ambas cosas en django 1.6.6 – radtek

1

admin.site.disable_action('delete_selected')

Desde el docs