내 모델의 특정 인스턴스에서 Postgres JSONField 내부의 데이터를 쿼리하는 방법을 찾으려고합니다.Django 모델의 JSONField 내용 쿼리
모든 사용 사례는 JSONField 특성이있는 경우와 동일한 특성을 갖는 경우에 사용되며 특성 - >> color = 'red'또는 기타와 같은 모델 인스턴스를 모두 선택하는 것과 같습니다.
좀더 실제적인 예를 들어 보겠습니다. 모델이 Shoe
이고 필드의 가격과 수량이 같지만 객체의 배열 인 versions
이라는 JSONField라고 가정 해 봅시다. 각 버전을 특별하게 만드는 것들.
신발 모델의 하나 개의 인스턴스가 에어 조던 경우 그래서, 속성은 JSONField처럼 볼 수 있었다 :
[
{
color: black,
edition: limited,
tongueColor: red
},
{
color: black,
edition: standard
},
{
color: gold,
edition: fancy,
bright: very
}
]
그래서 우리가 할 수있는 두 가지가있다, 우리가 할 수있는 :
- 쿼리 모델 검은 색 (Air Jordans를 반환하는 플러스 어쩌면 다른 신발)이있는 모든 신발 또는
- color = black 인 JSONField 버전 내의 모든 개체에 대해 모델의 인스턴스를 쿼리합니다. 그래서 만약 우리가 이미
Shoe.objects.filter(name='Air Jordans')
또는 무엇인가 가지고 있다면, 끝 부분의 어떤 메소드 나 뭔가를 집어 넣을 수 있습니다. 위의 처음 두 객체를 반환합니다.color == black
?
온라인으로 예를 찾을 수 있지만 두 번째로는 할 수 없습니다.
개체를 메모리와 필터로 가져올 수 있지만이 JSONField는 매우 많은 양의 임의 데이터를 저장하기를 원하기 때문에 전체 BLOB를 메모리로 가져 오지 않고 쿼리 할 수 있다는 것이 매우 중요합니다 . JSONField가이를 지원합니까?
우리가 두 번째 작업을 수행 할 수 있다는 것을 어떻게 아십니까? – valignatev
필자는 확신이 서지 않지만이 .filter (versions__contains = { 'color': 'black'})'또는'.filter (versions__contains = [{ 'color': 'black'} ])'. 그렇지 않으면 아마도 사용자 정의 조회를 만들고'json_to_recordset()'을 사용해야합니다. https://www.postgresql.org/docs/9.5/static/functions-json.html#FUNCTIONS-JSON-PROCESSING-TABLE –
@valentjedi - 제가 가지고 있습니다. 이것이 가능한지 전혀 모른다. 가능한 것은 아니다. – cbrainerd