수색…


통사론

  • JSONField (** 옵션)

비고

  • Django의 JSONField 실제로 데이터를 Postgres JSONB 열에 저장합니다.이 열은 Postgres 9.4 이상에서만 사용할 수 있습니다.

  • JSONField 는보다 유연한 스키마를 원할 때 유용합니다. 예를 들어 데이터 마이그레이션을 수행하지 않고 키를 변경하려는 경우 또는 모든 객체가 동일한 구조를 가지지 않는 경우입니다.

  • 정적 키를 사용하여 데이터를 저장하는 경우 JSONField 를 쿼리 JSONField 때때로 지루할 수 있으므로 JSONField 대신 여러 개의 일반 필드를 사용하는 JSONField 좋습니다.

쿼리 연결

쿼리를 함께 연결할 수 있습니다. 예를 들어 목록에 사전이있는 경우 두 개의 밑줄과 사전 쿼리를 추가합니다.

이중 밑줄로 쿼리를 구분하는 것을 잊지 마십시오.

JSONField 만들기

장고 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에 데이터가 포함 된 개체 만들기

예를 들어, 기본 파이썬 형태로 데이터를 전달 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 직접 주문하는 것은 아직 장고에서 지원되지 않습니다. 그러나 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'] 별로 주문 data .

data = JSONField()


Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow