django postgres JSONField |查询以检入值列表(包含)

时间:2016-10-12 15:02:16

标签: django postgresql django-jsonfield

django 1.9 (使用 postgresdb )中,我们正在使用 JSONField (在模型中),其条目看起来像这样:

**Entry 1**(in a row of that table):
data: {
  "key1": "value1",
  "key2": "value2",
  "key3": "value3",
  "key4": "value4"
}

**Entry 2**(in a row of that table):
data: {
  "key5": "value4",
  "key6": "value2",
  "key7": "value2",
  "key8": "value4"
}

我想查询值,例如data__value__contains =' value4'

Django支持"键"(has_key,has_any_keys,has_keys)相关查询

查询上述需求的好方法是什么?

1 个答案:

答案 0 :(得分:0)

如何使用HStoreField代替JSONField,然后可以访问values查找。

MyModel.objects.filter(data__values__contains='value4')

Django docs中所述,JSON字段只有这些查找:

  

遏制和关键操作¶

     

JSONField与HStoreField共享与包含和密钥相关的查找。

     
      
  • 包含(接受任何JSON而不仅仅是字符串字典)
  •   
  • contained_by(接受任何JSON而不仅仅是字符串字典)
  •   
  • 对象的has_key
  •   
  • has_any_keys
  •   
  • has_keys
  •