開発環境:django3.0.7
, python3.7
, mysql
新しいバージョンの環境では別の設定方法があるかも知れませんが・・・。
DjangoのJSONField
で日本語が入ったdict
をDBに登録してみたら、日本語がunicode
になってしまって人が読めない状態になりました。それで日本語が日本語のまま登録される方法があるか見てみました。
これは試したが、失敗
json.dumps
にensure_ascii=False
を指定すると日本語がunicode
にならないstr
値を取得できます。
それでdict
ではなくてjson.dumps
で変換したstr
を入れてみました。
model.jsoncol = json.dumps({ "ほげほげ": "テスト" }, ensure_ascii=False)
ですが、結果は同じく日本語はunicode
になっていました。
これで解決!
JSONField
の親クラスのJSONFieldMixin
処理の中にjson.dumps
を呼び出す箇所がありました。
JSONField
の引数のdump_kwargs
を指定したら、json.dumps
にまで渡される仕組みでした。
それで以下のように設定して解決!
sample_filed = JSONField(dump_kwargs={ "ensure_ascii": False })
DBのレコードに日本語が日本語のままになって登録されて人が読めるようになりました。