Как отключить удаление инлайн-объекта при использовании 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
Вот как это отображается при добавлении нового компьютера
Как вы видите, я не хочу иметь столбец 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 } ]
Колонка удаления исчезла из инлайна, но под ней появилась кнопка удаления
Мы можем найти ответ в этом выпуске 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
Это скрывает флажок "Удалить".