Buscar..


Sintaxis

  • JSONField (** opciones)

Observaciones

  • El JSONField de Django realmente almacena los datos en una columna JSONB Postgres, que solo está disponible en Postgres 9.4 y posteriores.

  • JSONField es genial cuando quieres un esquema más flexible. Por ejemplo, si desea cambiar las claves sin tener que realizar ninguna migración de datos, o si no todos sus objetos tienen la misma estructura.

  • Si está almacenando datos con claves estáticas, considere usar varios campos normales en lugar de JSONField s, ya que la consulta a JSONField puede ser bastante tediosa a veces.

Encadenar consultas

Puedes encadenar consultas juntas. Por ejemplo, si un diccionario existe dentro de una lista, agregue dos guiones bajos y su consulta de diccionario.

No te olvides de separar las consultas con guiones bajos.

Creando un campo JSON

Disponible en Django 1.9+

from django.contrib.postgres.fields import JSONField
from django.db import models

class IceCream(models.Model):
    metadata = JSONField()

Puede agregar las **options normales **options si lo desea.

! Tenga en cuenta que debe poner 'django.contrib.postgres' en INSTALLED_APPS en su settings.py

Creando un objeto con datos en un campo JSON

Pase datos en forma nativa de Python, por ejemplo, list , dict , str , None , bool , etc.

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'],
})

Consulte la nota en la sección "Comentarios" sobre el uso de JSONField en la práctica.

Consulta de datos de nivel superior.

IceCream.objects.filter(metadata__ordered_by='Guido Van Rossum')

Consulta de datos anidados en diccionarios.

Obtenga todos los conos de helado que fueron ordenados por personas que les gusta el chocolate:

IceCream.objects.filter(metadata__buyer__favorite_flavor='chocolate')

Consulte la nota en la sección "Comentarios" sobre el encadenamiento de consultas.

Consulta de datos presentes en matrices

Un entero se interpretará como una búsqueda de índice.

IceCream.objects.filter(metadata__buyer__known_for__0='creating stack overflow')

Consulte la nota en la sección "Comentarios" sobre el encadenamiento de consultas.

Ordenar por valores JSONField

El pedido directamente en JSONField todavía no se admite en Django. Pero es posible a través de RawSQL usando las funciones PostgreSQL para jsonb:

from django.db.models.expressions import RawSQL
RatebookDataEntry.objects.all().order_by(RawSQL("data->>%s", ("json_objects_key",)))

Este ejemplo ordena por data['json_objects_key'] dentro de JSONField nombre de data :

data = JSONField()


Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow