经过艰苦的努力,我成功地将以前用sqlite运行的django项目转换为与MongoDB一起运行。 这很棒,除了我的旧版本有一个庞大的initial_data.json文件,现在在运行django的syncdb命令时无法使用新的db。
修改
这是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不是要走的路,而且应该有一种转储呢?
我搜索了谷歌,似乎没有什么能解决这个问题。我显然是在问错误的问题。
我应该怎么做,在我改变的项目中创建灯具?
非常感谢, Nitzan
答案 0 :(得分:2)
从错误消息中,我假设您使用的是Django MongoDB Engine?
您的pk
值必须是有效的ObjectIds,请尝试使用以下值:
您可以获取ObjectIds或检查您是否具有正确的值:
>>> from bson.objectid import ObjectId
>>> ObjectId()
> ObjectId('52af59bac38f8420734d064d')
>>> ObjectId('000000000000000000000001')
> ObjectId('000000000000000000000001')
>>> ObjectId('bad')
*error*