【发布时间】:2013-12-17 04:00:29
【问题描述】:
历经千辛万苦,我设法将我以前使用 sqlite 运行的 django 项目转换为使用 MongoDB 运行。 这很好,除了我的旧版本有一个巨大的 initial_data.json 文件,现在在运行 django 的 syncdb 命令时无法使用新的数据库。
编辑:
这是 initial_data.json 文件的示例:
[{"pk":1,
"model": "vcb.dishtype",
"fields": {
"photo": "images/dishes/breakfast.jpg",
"name": "Breakfast"
}
},
{"pk":2,
"model": "vcb.dishtype",
"fields": {
"photo": "images/dishes/bread_and_pastry.jpg",
"name": "Bread and pastry"
}
}]
运行 syncdb 后,我得到:
DeserializationError:安装夹具时出现问题 'C:\Users..\initial_data.json' : u'pk'
这似乎是 MongoDB objectId 以及我如何定义 initial_data 文件的问题。 我试图从文件中删除所有 pks 字段,但仍然是同样的错误。
编辑
我尝试只放置两个灯具,如果我不设置 pk,我会得到与上面相同的错误。如果我设置它,我会得到:
“DatabaseErroe:安装夹具 'C:..\initial_data.json' 时出现问题: 无法加载 vcb.dishtype(pk=1):AutoField(默认主键) 值必须是表示 MongoDB 上的 ObjectId 的字符串(得到 u'1' 而是)”。
这是我在 django 网站上遇到的类似问题,在此线程的帮助下已解决:Django MongoDB Engine error when running tellsiteid
这引起了我的怀疑,即在此基础架构中设置固定装置的方法不同。也许 syncdb 不是要走的路,也许应该有一种转储?
我搜索了谷歌,似乎没有任何东西可以解决这个问题。我显然问错了问题。
我应该怎么做才能在我更改的项目中创建固定装置?
非常感谢, 尼赞
【问题讨论】:
-
你尝试了什么,你得到了什么错误信息,等等?请提供更具体的上下文,这样我们可能会为您提供帮助。
-
@favoretti 我已经编辑了我的帖子。 Tnx 为您节省时间
-
我看到,与 django 根据他们自己的文档 (docs.djangoproject.com/en/1.5/howto/initial-data) 应该吞下的 JSON initial_data 文件不同的是,您的 JSON 对象不是一个列表。
-
这是一个列表,我在文件末尾有“[”和“]”。我只是没有复制它。
-
如果您从简单开始并在您的 initial_data 中仅提供一两个条目,那么它会起作用吗?只是想看看它是特定条目的反序列化错误还是一般。
标签: django mongodb python-2.7 django-mongodb-engine