2

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の衝突である可能性がありますか?

4

3 に答える 3

0

JSONFieldfromを使用していませんdjango.contrib.postgres.fieldsか? その場合、次のようになります。

WebFile.objects.filter(json_field__title__contains='moon')

関連するものを投稿できますmodels.pyか?django.contrib.postgres.fieldsまた、デフォルトのモデルを使用して依存していない場合(手動で a などを拡張するCharField場合など)、苦労することになります。

于 2016-04-15T16:24:53.940 に答える