Django                
            JSONField - поле PostgreSQL
        
        
            
    Поиск…
Синтаксис
- JSONField (** опция)
замечания
- JSONFieldDjango фактически хранит данные в столбце Postgres- JSONB, который доступен только в Postgres 9.4 и более поздних версиях.
- JSONFieldподходит для более гибкой схемы. Например, если вы хотите изменить ключи, не выполняя никаких миграций данных, или если не все ваши объекты имеют одинаковую структуру.
- Если вы храните данные со статическими ключами, вместо этого вместо использования - JSONFieldиспользовать несколько нормальных полей, так как запрос- JSONFieldможет быть довольно утомительным.
Цепочки запросов
Вы можете связать запросы вместе. Например, если словарь существует внутри списка, добавьте два символа подчеркивания и ваш словарь.
Не забудьте разделить запросы с двойными подчеркиваниями.
Создание JSONField
Доступно в Django 1.9+
from django.contrib.postgres.fields import JSONField
from django.db import models
class IceCream(models.Model):
    metadata = JSONField()
 Вы можете добавить обычные **options если хотите. 
! Обратите внимание, что вы должны поместить
'django.contrib.postgres'вINSTALLED_APPSвsettings.py
Создание объекта с данными в JSONField
 Передавать данные в родной форме Python, например list , dict , str , None , bool и т. Д. 
IceCream.objects.create(metadata={
    'date': '1/1/2016',
    'ordered by': 'Jon Skeet',
    'buyer': {
         'favorite flavor': 'vanilla',
         'known for': ['his rep on SO', 'writing a book']
     },
    'special requests': ['hot sauce'],
})
См. Примечание в разделе «Замечания» об использовании
JSONFieldна практике.
Запрос данных верхнего уровня
IceCream.objects.filter(metadata__ordered_by='Guido Van Rossum')
Запрос данных, вложенных в словари
Получите все конусы мороженого, которые были заказаны людьми, любящими шоколад:
IceCream.objects.filter(metadata__buyer__favorite_flavor='chocolate')
См. Примечание в разделе «Примечания» о цепочке запросов.
Запрос данных, присутствующих в массивах
Целое число будет интерпретироваться как индексный поиск.
IceCream.objects.filter(metadata__buyer__known_for__0='creating stack overflow')
См. Примечание в разделе «Примечания» о цепочке запросов.
Заказ по значениям JSONField
 Заказ на JSONField еще не поддерживается в Django. Но это возможно через RawSQL, используя функции PostgreSQL для jsonb: 
from django.db.models.expressions import RawSQL
RatebookDataEntry.objects.all().order_by(RawSQL("data->>%s", ("json_objects_key",)))
 Этот пример упорядочивает data['json_objects_key'] внутри JSONField именем data : 
data = JSONField()