この使用法は、ややアンチパターンです。また、その実装では通常のパフォーマンスが得られず、おそらくエラーが発生しやすくなります。
通常、フィールドを検索する必要がある場合は、jsonfield を使用しないでください。ダニエルが指摘したように、RDBMS が提供する方法または MongoDB (より高速な BSON で内部的に動作する) を使用します。
JSON 形式の決定論により、contains
(regex
複数の場合に問題があり、さらに遅い)を使用してそれを達成できます。この方法で'\'
使用するのは良くないと思うので、代わりに使用してください:username
name
def make_cond(name, value):
from django.utils import simplejson
cond = simplejson.dumps({name:value})[1:-1] # remove '{' and '}'
return ' ' + cond # avoid '\"'
User.objects.get(jsonfield__contains=make_cond(name, value))
それは限り動作します
- 同じダンプ ユーティリティを使用した jsonfield (
simplejson
こちら)
name
あまり特別ではありvalue
ません(これまでのところ、egde-caseは知りません。誰かが指摘できるかもしれません)
- あなたのjsonfieldデータは壊れていません(そうではありませんが)
実際、私は編集可能な jsonfield に取り組んでおり、そのような操作をサポートするかどうかを考えています。否定的な証拠は、上で述べたように、黒魔術のように感じます。