? He logrado desactivar la acción "Eliminar seleccionados". Fácil.En Django Admin, ¿cómo desactivo el enlace Eliminar
Pero un usuario aún puede hacer clic en un elemento y luego aparece el enlace Eliminar rojo en la parte inferior.
? He logrado desactivar la acción "Eliminar seleccionados". Fácil.En Django Admin, ¿cómo desactivo el enlace Eliminar
Pero un usuario aún puede hacer clic en un elemento y luego aparece el enlace Eliminar rojo en la parte inferior.
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
sólo tiene que desactivar el permiso yourapp.delete_yourmodel
para ese usuario o el grupo al que pertenece.
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. –
simple :)
class DeleteNotAllowedModelAdmin(admin.ModelAdmin):
# Other stuff here
def has_delete_permission(self, request, obj=None):
return False
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
¿Desea eliminar el menú desplegable también, en caso de que, siga la solución de radtek – thevangelist
@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
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
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
admin.site.disable_action('delete_selected')
Desde el docs
no funciona. No afecta la página individual. Solo deshabilita la acción cuando se busca en la lista. –