5

を呼び出すたびに読み込まれるJSON初期データフィクスチャを作成しようとしていますsyncdb

ディレクトリinitial_data.jsonにファイルを配置しました。mysite/myapp/fixtures

[
  {
    "model": "myapp.Person",
    "pk": 1,
    "fields": {
      "first_name": "Tom",
      "last_name": "Yam"
    }
  }
]

ファイルがASCIIでエンコードされている場合はすべて機能していますが、UTF-8エンコードで保存すると(非ASCII文字を使用する必要があります)、次のエラーが発生します。

Problem installing fixture 'initial_data.json': Traceback (most recent call last):
File "D:\Tom\DjangoEnv\Lib\site-packages\django\core\management\commands\loaddata.py", line 190, in handle
for obj in objects:
File "D:\Tom\DjangoEnv\Lib\site-packages\django\core\serializers\json.py", line 47, in Deserializer
raise DeserializationError(e)
DeserializationError: No JSON object could be decoded

Djangoのドキュメントによると、非ASCIIデータとJSONシリアライザーを操作するときに設定する必要がensure_ascii=Falseありますが、その方法がわかりません(syncdb関数から呼び出されるため)。

UTF-8でエンコードされたJASONファイルをフィクスチャとして使用する方法はありますか?

4

1 に答える 1

1

load_dataオプションをシリアライザーに渡さないensure_asciiため、2つのオプションがあります。

  1. データをロードする前にエスケープされたASCIIユニコードに変換します。

    import codecs
    encoded = codecs.open('/tmp/tst.txt', 'r', 'utf-8').read().encode(
                'ascii', 'backslashreplace')
    open('/tmp/tst-encoded.txt', 'w').write(encoded)
    
  2. 合格する独自の管理コマンドを作成するensure_ascii

お役に立てれば。

于 2012-09-28T07:10:43.300 に答える