Django
JSONField - PostgreSQL固有のフィールド
サーチ…
構文
- JSONField(**オプション)
備考
Djangoの
JSONField実際にPostgresJSONBカラムにデータを格納します。これは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.pyINSTALLED_APPSに'django.contrib.postgres'を入れなければならないことに注意してください
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を使用する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()