DJango包含不适用于JSONField

时间:2017-02-04 12:21:40

标签: python django django-orm

我创建了这样的模型:

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

并且数据归档具有以下结构:

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

问题是,当我想通过包含查询时,它不会返回任何结果。

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

生成的sql查询结果不能为' json提供正确的sql,例如'结构

3 个答案:

答案 0 :(得分:3)

试试这个:

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

答案 1 :(得分:3)

Django中的JSONField与json.dumps()

一起保存

您可以尝试:

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)

答案 2 :(得分:1)

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

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

返回的对象是键值对的给定dict全部包含在字段中的对象。