サーチ…


構文

  • JSONField(**オプション)

備考

  • DjangoのJSONField実際にPostgres JSONBカラムにデータを格納します。これはPostgres 9.4以降でのみ利用可能です。

  • JSONFieldは、より柔軟なスキーマが必要な場合にJSONFieldです。たとえば、データの移行を行わずにキーを変更したい場合や、すべてのオブジェクトが同じ構造を持っていない場合などです。

  • あなたは、静的キーを使用してデータを保存している場合は、複数の通常のフィールドの代わりに使用することを検討JSONField照会として、sの代わりにJSONField時々かなり退屈得ることができます。

クエリの連鎖

クエリを連鎖させることができます。たとえば、リスト内に辞書が存在する場合は、2つのアンダースコアと辞書クエリを追加します。

二重のアンダースコアでクエリを区切ることを忘れないでください。

JSONFieldの作成

Django 1.9以降で利用可能

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

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

必要に応じて、通常の**options追加することができます。

あなたのsettings.py INSTALLED_APPS'django.contrib.postgres'を入れなければならないことに注意してください

JSONFieldにデータを含むオブジェクトを作成する

ネイティブのPython形式でデータを渡します(例えば、 listdictstrNoneboolなど)。

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を使用する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値による注文

Djangoでは、 JSONFieldで直接注文することはまだサポートされていません。しかし、jSQLbのPostgreSQL関数を使ってRawSQLを介して行うことができます:

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

この例では、 data['json_objects_key']という名前のJSONField内のdata['json_objects_key']JSONField data

data = JSONField()


Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow