Вы можете переопределить сохраните модель класса,() (ничего не делать, если self.pk) и удалять (всегда ничего не делать)
Но на самом деле, уровень базы данных является самым безопасным местом для этого. Например, в PostgreSQL можно написать два простых правила:
CREATE RULE noupd_myapp_mymodel AS ON UPDATE TO myapp_mymodel
DO NOTHING;
CREATE RULE nodel_myapp_mymodel AS ON DELETE TO myapp_mymodel
DO NOTHING;
В любом случае, администратор бы ничего об этом не знает, так что все еще выглядит редактируемые. См. Мой ответ на Whole model as read-only, чтобы попытаться создать модель для чтения только для администратора. Для ваших целей сохраните разрешение добавления как есть, и только объявляйте все поля только для чтения, когда не добавляете.
EDIT: одна из причин, почему переопределение метода delete() в классе модели небезопасно, заключается в том, что «массовое удаление» (Queryset.delete(), например, действие флажков admin) не будет вызывать удаление отдельных экземпляров (), он перейдет прямо к SQL: https://docs.djangoproject.com/en/dev/topics/db/queries/#deleting-objects
Что мне не нравится в этом подходе, так это то, что после нажатия кнопки «Сохранить» есть сообщение «... было успешно изменено». Ничего не изменилось. Есть ли способ изменить это сообщение на «Изменение отключено»? Или еще лучше отключить нажатие этой строки? – WebOrCode
Есть ли способ предотвратить 'MyModel.objects.filter (pk = my_model.pk) .update (name =" bob ")' –