2017-02-04 6 views
0
上では動作しません含まれてい

私はこのようなモデルを作成しました:私は、それはdoesnの含まれていることにより、照会したいときDjangoはJSONField

Customer.objects.create(name='David', data={ 
    'key1': 'text1', 
    'key2': 'text2', 
    }, 
}) 

問題がある:

class Customer(models.Model): 
    name = models.CharField(max_length=200) 
    data = JSONField() 

とデータが提出されたが、この構造を有しています結果を返しません。

Customer.objects.filter(data__key1__contains='t') 

生成されたsqlクエリ結果は、 'json like'構造に対して正しいsqlを提供しません。

+1

afaikこれはできません。あなた自身のルックアップフィルタを作成しようとすることができますhttps://docs.djangoproject.com/en/1.10/howto/custom-lookups/ – yedpodtrzitko

答えて

0

https://docs.djangoproject.com/en/1.10/ref/contrib/postgres/fields/#std:fieldlookup-hstorefield.contains

Customer.objects.filter(data__contains={'key1': 'text1'}) 

返されるオブジェクトは、キーと値のペアの所定の辞書は、すべてのフィールドに含まれている場合のものです。

+0

これも動作しません。それはHStoreField用です。 –

+0

oh、allright。私はこの[ドキュメントの一部](https://docs.djangoproject.com/en/1.10/ref/contrib/postgres/fields/#containment-and-key-operations)を勘違いしています。それは書いています: JSONFieldはHStoreFieldを使って封じ込めとキーに関するルックアップを共有します。 – Wilfried

1

これを試してみてください:

はジャンゴでJSONFieldがjson.dumps()で保存され
Customer.objects.filter(data__key1__icontains='t') 
1

はあなたが試すことができます。

import json 
search = json.dumps({'key1': 'text1'})[1:-1] # removed { and } 
Customer.objects.filter(data__contains=search) 

このコードが失敗した場合、あなたが試すことができます次:

search = '"key1":"text1"' 
Customer.objects.filter(data__contains=search) 
関連する問題