Я согласен с вашим решением о защите определенных объектов от удаления в вашей проблеме. Для этого есть два способа:
- Когда происходит удаление, проверьте, защищен ли объект или нет
- Настройте права администратора и не позволяйте никому удалять объект из админ-панели
Основным отличием является, во-первых, единственный способ удалить защищенные объекты из интерфейса командной строки базы данных, однако, во-вторых, модель можно удалить в коде.
Для первого способа вам необходимо переопределить удалить метод модели и проверить что-то вроде этого
assert pk != self.protected_objects
Где список защищенных объектов является свойством класса вашей модели.
Для второго способа вы бы сделали
class YourModel(admin.ModelAdmin):
protected_objects = [1,2,...]
def has_delete_permission(self, request, obj=None):
return obj.pk not in self.protected_objects