ВЫБЕРИТЕ на JSONField с Django

Мое приложение сильно зависит от API, которые непредсказуемо вносят изменения в способ возврата данных. По этой причине я решил использовать PSQL и JSONFields с Django.
Я видел множество примеров / документов о том, как фильтровать по значениям в JSONField, но я не видел ни одного, который позволял бы мне ВЫБРАТЬ на этих значениях.

То, что я знаю, работает;
queryset.filter(jsonfield__key_name = 'value')

Что я хочу знать, как делать;
queryset.values('jsonfield__key_name')

Заранее спасибо!

1 ответ

Ответ является выражением RawSQL;
from django.db.models.expressions import RawSQL queryset.annotate(value = RawSQL("(jsonfield->%s)", ('key_name',))) queryset.values('value')
Первый аргумент RawSQL как строка шаблона, второй аргумент заполнит первый %s

Начиная с Django 2.1, преобразования поддерживаются в order_by(), values() а также values_list()теперь вы можете использовать это:

queryset.values('jsonfield__key_name')

Вот соответствующий билет и запрос на получение.

Другие вопросы по тегам