Django orm limit before annotation

Я хочу ограничить набор запросов перед аннотацией! Вот мой код django orm :

ProductDB.objects.prefetch_related('media').select_related("cover", 'category').filter(**variants_filter)[offset:offset + limit].annotate(
            variants_count=Count('product_variants'))

вот запрос, который генерирует django:

SELECT "shop_product"."id",
   "shop_product"."is_deleted",
   "shop_product"."created_at",
   "shop_product"."updated_at",
   "shop_product"."approval_status",
   "shop_product"."name",
   "shop_product"."name_en",
   "shop_product"."slug",
   "shop_product"."source_name",
   "shop_product"."source_id",
   "shop_product"."default_variant_id",
   "shop_product"."phone_id",
   "shop_product"."phone_model_id",
   "shop_product"."category_id",
   "shop_product"."brand_id",
   "shop_product"."source_price",
   "shop_product"."cover_id",
   "shop_product"."attributes",
   "shop_product"."extra_data",
   COUNT(T3."id")                                       AS "variants_count",
   "shop_category"."id",
   "shop_category"."is_deleted",
   "shop_category"."created_at",
   "shop_category"."updated_at",
   "shop_category"."name",
   "shop_category"."name_en",
   "shop_category"."slug",
   "shop_category"."order",
   "shop_category"."parent_id",
   "account_file"."id",
   "account_file"."is_deleted",
   "account_file"."created_at",
   "account_file"."updated_at",
   "account_file"."file",
   "account_file"."normal",
   "account_file"."thumbnail",
   "account_file"."name",
   "account_file"."type",
   "account_file"."user_id",
   "account_file"."source"
FROM "shop_product"
         LEFT OUTER JOIN "shop_variant" T3 ON ("shop_product"."id" = T3."product_id")
         LEFT OUTER JOIN "shop_category" ON ("shop_product"."category_id" = "shop_category"."id")
         LEFT OUTER JOIN "account_file" ON ("shop_product"."cover_id" = "account_file"."id")
WHERE "shop_product"."default_variant_id" IS NOT NULL
GROUP BY "shop_product"."id",
         "shop_category"."id", "account_file"."id"
LIMIT 5

Django ставит лимит после всех селектов и это очень медленно: Если я помещаю limit на select, он работает очень быстро: Просто заменив (select * from "shop_product" limit 5) вместо FROM "shop_product"

Я делаю это неправильно? Как я могу реализовать это с помощью orm

Вернуться на верх