Как сделать `jsonb_array_elements` в условии where в моделях django
У меня есть модель:
class Profile(models.Model):
...
criteria = models.JSONField()
Критерии могут выглядеть следующим образом:
{
"product_uuids": [uuid1, uuid2, ...]
}
Мне нужно выполнить запрос:
SELECT *
FROM profilemodel
WHERE deleted_at IS NULL and
(criteria -> 'product_uuids')::text !='null' AND
NOT EXISTS(
select product_uuid::varchar
from jsonb_array_elements(criteria -> 'product_uuids') as product_uuid
where product_uuid::varchar not in (
select my_product::varchar
from jsonb_array_elements('["uuid1", "uuid2", ...]'::jsonb) as my_product)
)
Запрос хочет получить все профили, в которых нет ни одного uuid продукта, не входящего в ожидаемый список ["uuid1", "uuid2", ...].
Я попытался аннотировать jsonb_array_elements(criteria -> 'product_uuids')
на модели профиля, но она не использует модель внешнего слоя, и запрос не был сформирован, как ожидалось.
Хотелось бы получить здесь несколько предложений. Спасибо!
Попробуйте, пожалуйста, FYR
Profile.objects.filter(criteria__product_uuids = '..')