【问题标题】:initial_data for django running with MongoDB使用 MongoDB 运行的 django 的 initial_data
【发布时间】: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


【解决方案1】:

根据您的错误消息,我假设您使用的是Django MongoDB Engine?

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

  • '000000000000000000000001'
  • '000000000000000000000002'

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-21
    • 1970-01-01
    • 1970-01-01
    • 2012-10-25
    相关资源
    最近更新 更多