Сначала вот код:
Код: Выделить всё
class PersonAdmin(admin.ModelAdmin):
readonly_fields = ('created_at','created_by',)
def get_form(self, request, obj=None, **kwargs):
if obj: # we are in edit mode
if request.user.is_superuser:
self.readonly_fields = ()
else:
for group in request.user.groups.all():
if str(group) == 'readonlyuser':
allfields = tuple(obj._meta.get_all_field_names())
self.readonly_fields = allfields
return super(PersonAdmin, self).get_form(request, obj, **kwargs)
Мои проверки также дали решение:
Если я добавлю дополнительный оператор if для пользователя-администратора в блок for, все будет работать как положено.
Код: Выделить всё
if str(group) == 'adminuser':
self.readonly_fields = PersonAdmin.readonly_fields
У меня нет специальных настроек кэша, и это происходит на dev, а также на Apache с WSGI.
Насколько я понимаю, request.user.groups.all() должен возвращать все группы, в данный момент вошедшие в систему< /em> принадлежит пользователю. Откуда Django получает все поля (только для чтения), если другой пользователь с другим IP-адресом и сеансом соответствует этому блоку if?
Подробнее здесь: https://stackoverflow.com/questions/897 ... ame-fields