使用 Django 1.9 和 Postgres 9.4。
我有一个名为 .jsonb 的字段json_field
。json_field
可以包含title
看起来像'the cow jumped over the moon'
.
所以我想搜索title
包含的行moon
。
它使用以下原始 SQL 正常工作
SELECT * FROM web_file where (json_field ->> 'title')::text LIKE '%moon%';
但我宁愿使用 Django ORM。
编辑:
我想尝试(正如@kloddant 所指出的那样)
title = WebFile.objects.filter(json_field__title__contains='moon')
但它给出了以下错误
DataError: invalid input syntax for type json
LINE 1: ...le" WHERE "web_file"."json_field" -> 'title' @> 'moon' ORD...
^
DETAIL: Token "moon" is invalid.
CONTEXT: JSON data, line 1: moon
这是相关的models.py
from django.contrib.postgres.fields import JSONField
class WebFile(MPTTModel):
json_field = JSONField(null=True, blank=True, default=dict())
这可能是 django 模型和 MPTTModel 之间的冲突,尽管我对此表示怀疑?