📝 Django

Переопределение get_queryset в Django CBV

P
Автор
Pyland
📅
Опубликовано
30.06.2026
⏱️
Время чтения
1 мин
👁️
Просмотров
75
🌳
Уровень
Продвинутый
🐦 💼 ✈️

get_queryset() — метод для кастомизации набора данных в CBV.

Фильтрация по текущему пользователю

from django.views.generic import ListView
from django.contrib.auth.mixins import LoginRequiredMixin
from .models import Task

class MyTaskListView(LoginRequiredMixin, ListView):
    model = Task
    template_name = 'tasks/my_tasks.html'

    def get_queryset(self):
        return Task.objects.filter(owner=self.request.user)

Фильтрация из GET-параметров

class TaskListView(ListView):
    model = Task

    def get_queryset(self):
        qs = Task.objects.all()
        status = self.request.GET.get('status')
        if status:
            qs = qs.filter(status=status)
        q = self.request.GET.get('q')
        if q:
            qs = qs.filter(title__icontains=q)
        return qs.order_by('-created_at')

Зависимость от URL-параметров

# URL: /projects/<pk>/tasks/
class ProjectTaskListView(ListView):
    model = Task

    def get_queryset(self):
        project_pk = self.kwargs['pk']
        return Task.objects.filter(
            project__pk=project_pk,
            owner=self.request.user,
        )

DetailView — ограничение доступа

class TaskDetailView(LoginRequiredMixin, DetailView):
    model = Task

    def get_queryset(self):
        # 404 если задача не принадлежит пользователю
        return Task.objects.filter(owner=self.request.user)

vs get_context_data

Метод Цель
get_queryset() Определить набор объектов для отображения
get_context_data() Добавить дополнительные переменные в шаблон

get_queryset() запускается до get_context_data() — результат доступен через self.object_list или self.object.

Ваша реакция на статью

💬 Комментарии (0)

🔐 Войдите в систему, чтобы оставить комментарий
🚪 Войти
💭

Комментариев пока нет

Станьте первым, кто поделится мнением об этой статье!

🔗 Похожие

Похожие статьи

Продолжите изучение с этими материалами

📝

pytest-django: тестирование Django

Охватываемые темы: Установка, @pytest.mark.djangodb, Фикстуры, Тестирование views.

📅 30.06.2026 👁️ 138
📝

Django: Теги шаблонов

Теги шаблонов — это логика внутри HTML. В отличие от {{ переменная }}, которая только...

📅 30.06.2026 👁️ 91
📝

Списки в HTML

Список — один из самых частых элементов разметки. Навигационное меню, теги поста, шаги инструкции, глоссарий...

📅 30.06.2026 👁️ 90

Понравилась статья?

Подпишитесь на наши обновления и получайте новые статьи первыми. Развивайтесь вместе с PyLand!