Zoeken…


Syntaxis

  • JSONField (** opties)

Opmerkingen

  • Het JSONField Django slaat de gegevens op in een JSONB kolom van Postgres, die alleen beschikbaar is in Postgres 9.4 en hoger.

  • JSONField is geweldig als u een flexibeler schema wilt. Als u bijvoorbeeld de sleutels wilt wijzigen zonder datamigraties uit te voeren, of als niet al uw objecten dezelfde structuur hebben.

  • Als u gegevens met statische sleutels JSONField kunt u in plaats daarvan meerdere normale velden gebruiken in plaats van JSONField , omdat het opvragen van JSONField soms behoorlijk vervelend kan zijn.

Query's koppelen

U kunt zoekopdrachten samenvoegen. Als er bijvoorbeeld een woordenboek in een lijst bestaat, voegt u twee onderstrepingstekens en uw woordenboekquery toe.

Vergeet niet om vragen te scheiden met dubbele onderstrepingstekens.

Een JSON-veld maken

Beschikbaar in Django 1.9+

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

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

U kunt desgewenst de normale **options toevoegen.

! Merk op dat je 'django.contrib.postgres' in INSTALLED_APPS in je settings.py moet zetten

Een object met gegevens maken in een JSONField

Geef gegevens door in native Python-vorm, bijvoorbeeld 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'],
})

Zie de opmerking in de sectie "Opmerkingen" over het gebruik van JSONField in de praktijk.

Gegevens op het hoogste niveau opvragen

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

Gegevens opvragen die zijn genest in woordenboeken

Koop alle ijshoorntjes die werden besteld door mensen die van chocolade houden:

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

Zie de opmerking in het gedeelte 'Opmerkingen' over het koppelen van zoekopdrachten.

Gegevens opvragen in arrays

Een geheel getal wordt geïnterpreteerd als een indexopzoekactie.

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

Zie de opmerking in het gedeelte 'Opmerkingen' over het koppelen van zoekopdrachten.

Bestellen op JSONField-waarden

Direct bestellen op JSONField wordt nog niet ondersteund in Django. Maar het is mogelijk via RawSQL met behulp van PostgreSQL-functies voor jsonb:

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

Dit voorbeeld data['json_objects_key'] op data['json_objects_key'] in JSONField naam data :

data = JSONField()


Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow