我尝试使用Django提供的dumpdata
命令从数据库创建一组fixture,我希望能够使用loaddata
命令加载这些fixture。
我尝试转储的其中一个Model具有自定义字段:特别是,我遇到了从django. HStoreField继承的字段(类型为MyHStoreField)的问题,Django无法序列化MyHStoreField。
django.db.utils.InternalError: Problem installing fixture '/fixture_files/fixture.json':
Could not load MyModel: Syntax error near "F" at position 12
LINE 1: ...a_model_field" = '0.0000000000000000', "my_hstore_field" = '{"blabla...
从Django文档中,我认为这个类需要一个定制的JSONEncoder(https://docs.djangoproject.com/en/2.2/topics/serialization/#json-1)来序列化,但是,我不知道如何告诉dumpdata
和loaddata
使用这个编码器。
django是否使用某种注册表来了解哪些编码器可用,或者我是否需要覆盖loaddata
和dumpdata
命令?
1条答案
按热度按时间wn9m85ua1#
我发现问题出在对象的序列化上,因为在文件中它的格式是错误的:
这不是一个有效的json,而是一个Django不知道如何反序列化的json格式的字符串。
解决方案是在运行dumpdata之后使用脚本对文件进行后处理,并将该字段保存为有效的json: