Django dumpdata-loaddata序列化定制类时出错:'' F '附近有语法错误'

xmakbtuz  于 2023-01-03  发布在  Go
关注(0)|答案(1)|浏览(235)

我尝试使用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)来序列化,但是,我不知道如何告诉dumpdataloaddata使用这个编码器。
django是否使用某种注册表来了解哪些编码器可用,或者我是否需要覆盖loaddatadumpdata命令?

wn9m85ua

wn9m85ua1#

我发现问题出在对象的序列化上,因为在文件中它的格式是错误的:

"my_hstore_field": "{\"blabla\": false}"

这不是一个有效的json,而是一个Django不知道如何反序列化的json格式的字符串。
解决方案是在运行dumpdata之后使用脚本对文件进行后处理,并将该字段保存为有效的json:

"my_hstore_field": {"blabla": false}

相关问题