Получение групп, в которых более десяти постов

Добавьте annotate(post_count=Count('posts', distinct=True)), затем filter(post_count__gt=10). Так подсчёт и фильтрация выполняются в БД, а в шаблон передаётся готовый QuerySet.

Короткий ответ

Что ответить на собеседовании

Добавьте annotate(post_count=Count('posts', distinct=True)), затем filter(post_count__gt=10). Так подсчёт и фильтрация выполняются в БД, а в шаблон передаётся готовый QuerySet.

Подробный разбор

Ответ с пояснениями

Условие

В рамках Django‑проекта требуется написать функцию, возвращающую набор групп. Имеются две модели — Group и Post, связанные отношением many‑to‑many (одна группа может содержать множество постов). Необходимо отобрать только те группы, у которых количество связанных постов превышает 10. Пример шаблона функции:

def most_popular_groups(request):
    # Вывести список групп (Group), у которых кол-во постов (posts) больше 10
    popular_groups = ...
    return render(request, "groups.html", {"groups": popular_groups})

Внутри функции следует сформировать запрос, который подсчитывает количество постов для каждой группы и отбирает группы с числом постов > 10, после чего передать полученный QuerySet в шаблон "groups.html".

Ответ

Добавьте annotate(post_count=Count('posts', distinct=True)), затем filter(post_count__gt=10). Так подсчёт и фильтрация выполняются в БД, а в шаблон передаётся готовый QuerySet.

При имени связи posts:

from django.db.models import Count
from django.shortcuts import render

def most_popular_groups(request):
    groups = (
        Group.objects.annotate(post_count=Count('posts', distinct=True))
        .filter(post_count__gt=10)
        .order_by('-post_count', 'pk')
    )
    return render(request, 'groups.html', {'groups': groups})

Имя posts нужно сверить с фактической моделью. distinct защищает от повторного счёта при дополнительных соединениях. Если шаблон ещё и выводит сами посты каждой группы, отдельно добавьте prefetch_related: агрегат количества не загружает связанные объекты.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее