ВЫБЕРИТЕ на 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')
Вот соответствующий билет и запрос на получение.