Как сделать `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 = '..')
Вернуться на верх