【发布时间】:2018-11-11 16:35:00
【问题描述】:
我已经创建了这样的模型:
class Customer(models.Model):
name = models.CharField(max_length=200)
data = JSONField()
数据文件的结构如下:
Customer.objects.create(name='David', data={
fields: [
{id: 1, value: "abc"},
{id: 2, value: "efg}
]
})
如果我们用精确的 data.fields.item 过滤对象,我们可以这样做:
Customer.obejcts.filter(data__fields__contains=[{id: 1, value: "abc"}])
如果我们想过滤带有 data.fields.item 但不精确的 data.fields.item.value 的对象,如下所示,我们该怎么做?非常感谢!
Customer.obejcts.filter(data__fields__contains=[{id: 1, value: "b"}])
对于 PostgreSQL 中的原始 sql,也许我们可以这样做:
SELECT id, json_string(fields,'value') FROM table_name
WHERE json_string(fields,'value') LIKE '%b%';
并尝试以下 django 语句,但它不起作用:
queryset = Customer.objects\
.annotate(fieldValue=KeyTextTransform('value', 'fields'))\
.filter(fieldValue__contains='b')
【问题讨论】:
-
这是 PostgreSQL 数据库吗?大多数其他数据库系统无法“查看”JSON 对象。
-
是的,这是一个 PostgreSQL 数据库。
-
我尝试使用 KeyTextTransform,但它不起作用。我应该怎么做才能修复它?非常感谢。
标签: python django postgresql django-queryset