Group.objects.filter(user__id=288, group_id=172, role=const.ADMIN).exists().query
т.к. судя по коду, exists выполняется сразу, и это не "ленивая" функция
exists возвращает будевое значение а не queryset
это я знаю, мне нужно вытащить raw sql, которая генерирует orm без выполнения запроса
там выполняется select count() from where
queryset.query
queryset.exists() возвращает bool а не queryset
скорее select 1 from ... where ... limit 1;
возможно раньше было через count вроде сделано
по привычке отвечаю сам себе (видимо довольно редкие кейсы, либо не самый best practices) from django.db.models import Exists filter_query = Group.objects.filter(user__id=288, group_id=172, role=const.ADMIN) Group.objects. annotate(is_admin=Exists(filter_query)). values('is_admin')[:1].query получится что-то вроде SELECT EXISTS( SELECT (1) FROM "auth_group" U0 INNER JOIN "auth_user_groups" U2 ON (U0."id" = U2."group_id") WHERE (U0."group_id" = 172 AND U0."role" = 'admin' AND U2."user_id" = 288) LIMIT 1) AS "is_admin" FROM "auth_group" LIMIT 1 что вполне подходит (разве что select в select режет глаз)
так у тебя другой вопрос был
как получить raw sql запрос из exists? что собственно не то получилось?
как получить запрос Group.objects.filter(user__id=288, group_id=172, role=const.ADMIN).exists().query такого выражения
ну, видимо я неправильно выразился, а вообще да, сначала я хотел получить сырой запрос указанной конструкции, прямого подхода не было, пришлось искать что-то другое, чтобы дало такой же результат
Обсуждают сегодня