Как вариант, можно использовать метод
get_readonly_fileds
Т.е. несмотря на наличие у пользователя прав
change_*
, редактировать он по факту не сможет, т.к. все поля будут закрыты для изменения.
class BaseAdmin(admin.ModelAdmin):
def get_readonly_fields(self, request, obj=None):
if 'имя группы пользователей' in [g.name for g in request.user.groups.all()]:
return self.get_fields(request, obj)
return None
Дальше можно просто наследовать все модели от
BaseAdmin
, чтобы вручную не переопределять этот метод.
@admin.register(MyModel)
class MyModelAdmin(BaseAdmin):
pass
P.S. Мне самому мой способ кажется достаточно костыльным, был бы рад увидеть в ответах более красивое решение.