РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
613 of 818 menu

Метод get_queryset

Метод get_queryset применяется к классу административной панели ModelAdmin и возвращает QuerySet, который будет использоваться для отображения списка объектов в интерфейсе администратора. Метод принимает параметр request, что позволяет динамически изменять набор записей в зависимости от текущего пользователя или других условий запроса. Переопределение этого метода дает возможность гибко управлять доступом к данным и фильтровать записи для разных групп пользователей.

Синтаксис

class YourModelAdmin(admin.ModelAdmin): def get_queryset(self, request): qs = super().get_queryset(request) return qs.filter(...)

Пример

Давайте ограничим список статей в административной панели только теми, которые опубликованы:

from django.contrib import admin from myapp.models import Article @admin.register(Article) class ArticleAdmin(admin.ModelAdmin): list_display = ('title', 'status', 'created_at') def get_queryset(self, request): qs = super().get_queryset(request) return qs.filter(status='published')

Теперь в административной панели у пользователя будут отображаться только статьи со статусом 'published'. Результат выполнения запроса:

[<Article: Первая статья>, <Article: Вторая статья>]

Пример

Давайте отфильтруем записи в зависимости от прав пользователя. Обычные пользователи видят только свои записи, а суперпользователи видят все записи:

from django.contrib import admin from myapp.models import Article @admin.register(Article) class ArticleAdmin(admin.ModelAdmin): list_display = ('title', 'author', 'status') def get_queryset(self, request): qs = super().get_queryset(request) if request.user.is_superuser: return qs return qs.filter(author=request.user)

Результат выполнения кода для обычного пользователя:

[<Article: Моя первая статья>, <Article: Моя вторая статья>]

Результат выполнения кода для суперпользователя:

[<Article: Статья пользователя 1>, <Article: Статья пользователя 2>]

Пример

Используем метод get_queryset для сортировки записей и применения выборки с помощью select_related для оптимизации количества запросов к базе данных:

from django.contrib import admin from myapp.models import Article @admin.register(Article) class ArticleAdmin(admin.ModelAdmin): list_display = ('title', 'category', 'created_at') def get_queryset(self, request): qs = super().get_queryset(request) return qs.select_related('category').order_by('-created_at')

Теперь список статей будет отсортирован по дате создания в порядке убывания, а связанные категории будут подгружены одним дополнительным запросом:

[<Article: Новая статья>, <Article: Статья про Django>]

Смотрите также

  • класс ModelAdmin,
    который определяет интерфейс административной панели
  • атрибут list_display,
    который управляет отображением полей в списке
  • атрибут list_filter,
    который добавляет фильтры в боковую панель
  • метод save_model,
    который переопределяет сохранение модели
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить