我正在尝试编写一个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 documentation,我需要在处理非ASCII数据和JSON序列化程序时设置ensure_ascii=False
,但我无法弄清楚如何做到(因为它是从syncdb
功能。
如何使用UTF-8编码的JASON文件作为夹具?
答案 0 :(得分:1)
load_data
不会将ensure_ascii
选项传递给序列化程序,因此您有两种选择:
在加载数据之前将数据转换为ascii unicode,即:
import codecs
encoded = codecs.open('/tmp/tst.txt', 'r', 'utf-8').read().encode(
'ascii', 'backslashreplace')
open('/tmp/tst-encoded.txt', 'w').write(encoded)
编写您自己的管理命令,该命令将通过ensure_ascii
希望这会有所帮助。