Преобразование поля 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', который, как я полагаю, извлекает значение, связанное с указанным ключом, в виде текста. Я не могу понять, как заставить его генерировать правильный запрос.

Большое спасибо за помощь.

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