私のモデルの特定のインスタンスで、postgres JSONField内のデータを照会する方法を見つけようとしています。DjangoモデルのJSONFieldの内容を照会します。
すべてのユースケースは、属性JSONFieldを持っていて、次に属性の>> - color = 'red'などのモデルのすべてのインスタンスを選択した場合と同等のものです。
Shoe
というモデルがあり、値段と数量などをフィールドとしているが、オブジェクトの配列であるversions
というJSONFieldもあるとしよう。それぞれのバージョンを特別にするもの
靴モデルの1つのインスタンスは、エア・ジョーダンであれば、属性がJSONFieldは、次のようになります。
[
{
color: black,
edition: limited,
tongueColor: red
},
{
color: black,
edition: standard
},
{
color: gold,
edition: fancy,
bright: very
}
]
だから我々が行うことができる2つのものがあります、私たちは次のことができます。
- クエリモデル
- color = blackのJSONFieldバージョン内のすべてのオブジェクトのモデルのインスタンスを照会します。だから我々はすでに
Shoe.objects.filter(name='Air Jordans')
か何かを持っていた場合は、ちょうど上記の最初の2つのオブジェクトを返すいくつかの方法や何かの上にタックできるcolor == black
?
私はオンラインで最初のものを見つけることができますが、2番目のものではありません。
私はオブジェクトをメモリに持ち込んでそこからフィルタリングすることができますが、このJSONFieldは非常に大量の任意のデータを格納することを望んでいるため、ブロブ全体をメモリに取り込まずにクエリできることは非常に重要です。 JSONFieldでこれをサポートできますか?
私たちは第2のことをやり遂げることができますか? – 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