Преобразование поля Django JSON в текст в подзапросе
У меня есть две модели Assignment
и Application
. Assignment
имеет поле meta
, которое содержит данные uuid
, используемые для соответствия полю uuid
на Application
. Моя цель - объединить информацию о назначенцах, когда я запрашиваю приложения.
У меня есть такой код с использованием подзапроса.
assignment_subquery = Assignment.objects.filter(
meta__uuid=Cast(OuterRef('uuid'), TextField())
).values('assignee__username')[:1]
# Query applications and annotate them with the assignee's username
applications_with_assignee = Application.objects.annotate(
assignee_username=Subquery(assignment_subquery)
)
Вырабатываем SQL следующим образом
SELECT "application"."id",
"application"."uuid",
(SELECT U1."username"
FROM "assignment" U0
INNER JOIN "auth_user" U1 ON (U0."assignee_id" = U1."id")
WHERE (U0."meta" -> 'uuid') = ("application"."uuid")::text
LIMIT 1) AS "assignee_username"
FROM "application";
Все почти правильно, за исключением U0."meta" -> 'uuid'
вместо U0."meta" ->> 'uuid'
, который, как я полагаю, извлекает значение, связанное с указанным ключом, в виде текста. Я не могу понять, как заставить его генерировать правильный запрос.
Большое спасибо за помощь.