当我将模型实例保存到MongoDB数据库时,为什么Python会引发异常?

时间:2012-04-15 02:08:18

标签: python django mongodb django-nonrel

我一直在使用this tutorial来试验并使用MongoDB启动我的第一个Django应用程序。在本教程中,他们构建了一个简单的Post类,如下所示:

from django.db import models
from djangotoolbox.fields import ListField

class Post(models.Model):
    title = models.CharField()
    text = models.TextField()
    tags = ListField()
    comments = ListField()

非常简单。然后他们引导我构建一个Post对象:

post = Post.objects.create(
...     title='Hello MongoDB!',
...     text='Just wanted to drop a note from Django. Cya!',
...     tags=['mongodb', 'django'],
...     comments=['comment 1', 'comment 2']
... )

它会立即发送一个相当长的堆栈跟踪,我有copied here。最后的错误是:

TypeError: encoder expected a mapping type but got: {<django.db.models.fields.CharField object at 0x2fc5f10>: 'Hello MongoDB!', <djangotoolbox.fields.ListField object at 0x2fccd10>: ['comment 1', 'comment 2'], '_id': ObjectId('4f8a22f8db0ee4386f000000'), <djangotoolbox.fields.ListField object at 0x2fcc750>: ['django', 'mongodb'], <django.db.models.fields.TextField object at 0x2fcc290>: 'text test'}

似乎期待完全不同的数据类型,我不知道该去哪里。谷歌的搜索结果没有任何用处。任何提示或解决方案都将是一个福音。

谢谢,

ParagonRG

编辑:我已经意识到当我正确地按照教程使用Post.objects.create()创建初始对象时,它实际上是错误的。因此我有同样的问题,但没有save()函数。

编辑:键入pip freeze以在我的虚拟环境中显示当前安装的Python包给我:

Django==1.3.1
django-mongodb-engine==0.4.0
djangotoolbox==0.9.2
pymongo==2.1.1
wsgiref==0.1.2

2 个答案:

答案 0 :(得分:1)

我只是尝试了教程中描述的确切设置并且无法重现: - (

您确定您是否完全遵循安装说明?特别是,你使用完全相同的存储库吗?

您使用的是哪个版本的PyMongo?

答案 1 :(得分:0)

save()通常在更改模型对象或创建模型对象时使用。此网址应该让您前进。 https://docs.djangoproject.com/en/dev/topics/db/queries/