使用MongoDB运行的django的initial_data

时间:2013-12-16 17:56:06

标签: django mongodb python-2.7 django-mongodb-engine

经过艰苦的努力,我成功地将以前用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

1 个答案:

答案 0 :(得分:2)

从错误消息中,我假设您使用的是Django MongoDB Engine

您的pk值必须是有效的ObjectIds,请尝试使用以下值:

  • '000000000000000000000001'
  • '000000000000000000000002'

您可以获取ObjectIds或检查您是否具有正确的值:

>>> from bson.objectid import ObjectId
>>> ObjectId()
  > ObjectId('52af59bac38f8420734d064d')
>>> ObjectId('000000000000000000000001')
  > ObjectId('000000000000000000000001')
>>> ObjectId('bad')
*error*