Este es mi ModelAdmin :
class ComputerAdmin(ReverseModelAdmin): list_display = ('employee', 'ip', 'mac', 'name', 'hardware') list_filter = ('employee__branch', ) inline_type = 'tabular' inline_reverse = ['hardware', ] show_full_result_count = FalseAsí es como se muestra al agregar una nueva computadora:
Como puede ver, no quiero tener la columna de eliminación y el icono de eliminación, porque tengo una clave externa, por lo que solo se permite un elemento. ¿Cómo puedo hacer eso?
¿ django-reverse-admin tiene algo como has_delete_permisison solo para líneas y no para ModelAdmin completo? Ya he buscado en la documentación sin resultados, por eso estoy publicando aquí.
Actualicé mi código de la siguiente manera:
class HardwareInline(admin.TabularInline): model = Hardware def has_delete_permission(self, request, obj=None): return False class EmployeeAdmin(admin.ModelAdmin): list_display = ('group', 'branch', 'name') list_filter = ('group', ) class ComputerAdmin(ReverseModelAdmin): list_display = ('employee', 'ip', 'mac', 'name', 'hardware') list_filter = ('employee__group', 'employee__branch', ) inline_type = 'tabular' inline_reverse = [ { 'field_name': 'hardware', 'admin_class': HardwareInline } ]La columna de eliminación desapareció de la línea, pero aparece un botón de eliminación debajo:
Podemos encontrar la respuesta en este problema de GitHub :
Debe crear explícitamente una línea y agregarle un método has_delete_permission :
class HardwareInline(admin.TabularInline): model = Hardware def has_delete_permission(self, request, obj=None): return False Y luego, en su ReverseModelAdmin , debe especificar 'admin_class' :
class ComputerAdmin(ReverseModelAdmin): list_display = ('employee', 'ip', 'mac', 'name', 'hardware') list_filter = ('employee__group', 'employee__branch') inline_type = 'tabular' inline_reverse = [ {'field_name': 'hardware', 'admin_class': HardwareInline}, ]Esto debería ocultar la casilla de verificación "Eliminar".