Evgenii Legotckoi
31 січня 2020 р. 14:50

Django - Урок 051. Як змінити queryset і можливість редагування в ModelAdmin в залежності від користувача

Невелика замітка про те, як виправити queryset формі адміністрування admin.ModelAdmin або UserAdmin . Власне різниці ніякої, оскільки форма UserAdmin успадкованою від admin.ModelAdmin . Але тим не менше покажу на прикладі UserAdmin .

Завдання наступна. На сайті є суперкористувачі і користувачі з адміністрації. Суперкористувачі можуть бачити всіх користувачів і редагувати як завгодно. А користувачі адміністрації можуть бачити всі призначені для користувача записи крім суперкористувача, а також не можуть призначати інших користувачів суперкористувачем.


А тепер до вирішення. Виглядати дана форма буде наступним чином.

  1. # -*- coding: utf-8 -*-
  2.  
  3. from django.contrib.auth.admin import UserAdmin
  4.  
  5.  
  6. class EUserAdmin(UserAdmin):
  7. def get_readonly_fields(self, request, obj=None):
  8. # Робимо поле Нередагована, якщо користувач не є суперкористувачем
  9. return super().get_readonly_fields(request) if request.user.is_superuser else ('is_superuser',)
  10.  
  11. def get_queryset(self, request):
  12. qs = super().get_queryset(request)
  13. # а також виключаємо з queryset всіх суперкористувачем, якщо користувач не є суперепользователем
  14. return qs if request.user.is_superuser else qs.exclude(is_superuser=True)

Подібні обмеження корисні, якщо потрібно захистити суперкористувача від редагування звичайними користувачами з адміністрації.

Рекомендовані статті на цю тему

По статті запитували0питання

2

Вам це подобається? Поділіться в соціальних мережах!

Коментарі

Only authorized users can post comments.
Please, Log in or Sign up
  • Останні коментарі
  • Evgenii Legotckoi
    16 квітня 2025 р. 17:08
    Благодарю за отзыв. И вам желаю всяческих успехов!
  • IscanderChe
    12 квітня 2025 р. 17:12
    Добрый день. Спасибо Вам за этот проект и отдельно за ответы на форуме, которые мне очень помогли в некоммерческих пет-проектах. Профессиональным программистом я так и не стал, но узнал мно…
  • AK
    01 квітня 2025 р. 11:41
    Добрый день. В данный момент работаю над проектом, где необходимо выводить звук из программы в определенное аудиоустройство (колонки, наушники, виртуальный кабель и т.д). Пишу на Qt5.12.12 поско…
  • Evgenii Legotckoi
    09 березня 2025 р. 21:02
    К сожалению, я этого подсказать не могу, поскольку у меня нет необходимости в обходе блокировок и т.д. Поэтому я и не задавался решением этой проблемы. Ну выглядит так, что вам действитель…
  • VP
    09 березня 2025 р. 16:14
    Здравствуйте! Я устанавливал Qt6 из исходников а также Qt Creator по отдельности. Все компоненты, связанные с разработкой для Android, установлены. Кроме одного... Когда пытаюсь скомпилиров…