環境
OS: Windows10
Python: 3.9.5
Django: 3.2.8
エラーが起きた状況
Djangoのmodels.pyにて、JSONを扱いたかったので、
models.py
class Hoge(models.Model):
hogefield = models.JSONField()
として、
ファイルの変更後、例によって、
python manage.py makemigrations
python manage.py migrate
としたら、
hogeapp.Hoge: (fields.E180) SQLite does not support JSONFields
と表示された。
原因
「JSON1 extension」が有効でないことが原因。
(公式にも書いてあるけど)「JSON1 extension」が有効になっているかどうかは
プロジェクトディレクトリ>python manage.py shell
>>> import sqlite3
>>> conn = sqlite3.connect(':memory:')
>>> cursor = conn.cursor()
>>> cursor.execute('SELECT JSON(\'{"a": "b"}\')')
を実行してみればわかる。
→何もエラーが出なければ有効
→エラーが出たら有効になっていない。
解決策
「原因」セクションでの確認用コードでエラーが起きるか確認してみて、エラーの場合は公式通りに解決する。
当たり前のことだが、Linux, macOS, Windowsで対処法が違うので注意。
ちなみに、pythonのバージョンが3.9以降ならエラーは起きないとのこと。
参考
https://code.djangoproject.com/wiki/JSON1Extension
https://stackoverflow.com/questions/62637458/django-3-1-fields-e180-sqlite-does-not-support-jsonfields