В моем разделе admin django я хотел бы показать разные версии страницы администрирования в зависимости от того, какой пользователь в настоящий момент зарегистрирован. Я могу представить пару способов могут работать, но не выяснили, как сделать любой из них.Несколько версий страницы администрирования django для той же модели
Возможно, я мог бы поместить логику в admin.ModelAdmin, чтобы посмотреть на текущего пользователя и динамически изменить поле «исключить». Это работает? Или, может быть, запустите разные пользовательские шаблоны на основе того, кто вошел в систему, и у шаблонов есть/исключить поля, если это необходимо.
Я могу зарегистрировать две версии класса admin.ModelAdmin, по одному для каждого типа пользователей и, возможно, ограничить доступ через разрешения? Но система разрешений, похоже, довольно глубоко верит в один набор разрешений на класс модели, поэтому я не уверен, как это изменить.
Я мог бы захватить пару виджетов, которые используются при визуализации шаблонов страниц администратора, и включить их в мою собственную страницу, которая выполняет одну конкретную работу, в которой мне нужны мощные пользователи, чтобы иметь возможность делать.
Я мог бы создать несколько AdminSites и ограничить доступ к ним через систему url/view. Но тогда я не уверен, как регистрировать разные классы admin.ModelAdmin с разными AdminSites.
Любые советы по этому вопросу будут оценены по достоинству.
Ответ
Спасибо за подсказку. Вот как я это сделал ...
def get_form(self, request, obj=None, **kwargs):
"""This dynamically inserts the "owners" field into the exclude list
if the current user is not superuser.
"""
if not request.user.is_superuser:
if self.exclude:
self.exclude.append('owners')
else:
self.exclude = ['owners']
else:
# Necessary since Admin objects outlive requests
try:
self.exclude.remove('owners')
except:
pass
return super(OwnersModelAdmin,self).get_form(request, obj=None, **kwargs)
Спасибо. Это помогло. Я включил свой код в вопрос выше для справки. – Leopd