Как отключить удаление инлайн-объекта при использовании django-reverse-admin?

Это моя 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 = False

Вот как это отображается при добавлении нового компьютера

enter image description here

Как вы видите, я не хочу иметь столбец delete и иконку delete, потому что у меня есть внешний ключ, поэтому разрешен только один элемент. Как я могу это сделать? Есть ли у django-reverse-admin что-то вроде has_delete_permisison только для строк, а не для всего ModelAdmin? Я уже искал в документации безрезультатно, поэтому и пишу здесь. Спасибо

UPDATE

Я обновил свой код следующим образом

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 } ]

Колонка удаления исчезла из инлайна, но под ней появилась кнопка удаления

enter image description here

Мы можем найти ответ в этом выпуске GitHub (вся заслуга mschoettle):

В исходном коде я обнаружил, что можно указать admin_class для обратного инлайна:

class FooAdmin(ReverseModelAdmin):
    inline_type = 'stacked'
    inline_reverse = [
        {
            'field_name': 'bar',
            'admin_class': BarInline
        }
    ]

А затем в BarInline:

class BarInline(admin.StackedInline):
    model = Bar

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

Это скрывает флажок "Удалить".

Вернуться на верх