Django 1.9とPostgres 9.4を使用しています。このSQL文のdjango ORMバージョンはありますか?
json_field
というjsonbフィールドがあります。 json_field
には、のように見えるtitle
というキーを含めることができます。
title
にはmoon
が含まれている行を検索したいと思います。
それは正しく
SELECT * FROM web_file where (json_field ->> 'title')::text LIKE '%moon%';
次生のSQLを使用して動作しますが、私はむしろ、DjangoのORMを使用してそれを行うだろう。
EDIT:
私は
title = WebFile.objects.filter(json_field__title__contains='moon')
してみてください(と@kloddantで指摘したように)と考えられますが、それはここで
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の間に衝突があるかもしれませんが、疑わしいですか?
JSONFieldフィールドタイプはどこから来ますか?これはDjangoの一部ではなく、MPTTの一部でもありません。 –
@MadWombat Django 1.9の新機能https://docs.djangoproject.com/es/1.9/ref/contrib/postgres/fields/#jsonfield –
ドキュメントを読むことをお勧めします。 JSONFieldは文字列ではないので、 '__contains'フィルタは文字列と同じように動作しません。 https://docs.djangoproject.com/es/1.9/ref/contrib/postgres/fields/#querying-jsonfield –