1

经过一番艰辛,我设法将以前使用 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 Site 上遇到的类似问题,在这个线程的帮助下解决了这个问题:Django MongoDB Engine error when runningtellsiteid

这引起了我的怀疑,即在此基础架构中设置固定装置的方法不同。也许 syncdb 不是要走的路,也许应该有一种转储?

我搜索了谷歌,似乎没有任何东西可以解决这个问题。我显然问错了问题。

我应该怎么做才能在我更改的项目中创建固定装置?

非常感谢,尼赞

4

1 回答 1

2

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

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

  • '0000000000000000000000001'
  • '000000000000000000000002'
  • ETC

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

>>> from bson.objectid import ObjectId
>>> ObjectId()
  > ObjectId('52af59bac38f8420734d064d')
>>> ObjectId('000000000000000000000001')
  > ObjectId('000000000000000000000001')
>>> ObjectId('bad')
*error*
于 2013-12-16T19:52:48.090 回答