用mongoengine和django查询

时间:2012-05-14 11:28:47

标签: django mongoengine

我有一个数据库“tumblelog”(使用mongoengine),其中我在“user”集合中添加了一些带有“User”模型的数据:

  

db.user.find()

...
{ "_id" : ObjectId("4fb0c9494ca88402dd000000"), "_types" : [ "User" ], "first_name" : "John", "last_name" : "Doe", "_cls" : "User", "email" : "jdoe@example.com" }
{ "_id" : ObjectId("4fb0cb9d4ca88402ec000000"), "_types" : [ "User" ], "first_name" : "Joe30", "last_name" : "Foe", "_cls" : "User", "email" : "hu@huu.com" }

当我在django shell中尝试User.objects时,我收到以下错误:

Traceback (most recent call last):
  File "<console>", line 1, in <module>
  File ".../mongoengine/queryset.py", line 1127, in __getitem__
     return self._document._from_son(self._cursor[key])
  File ".../mongoengine/base.py", line 1018, in _from_son
     obj = cls(**data)
  TypeError: __init__() keywords must be strings

当我尝试

时也一样
for user in User.objects:
    print user.first_name

----编辑----

我试过这个

>>> users = User.objects
>>> users.count()
7
>>> users.first()
...
TypeError: __init__() keywords must be strings

----编辑2 ----

我以这种方式安装了我的项目:

> virtualenv Test
> source Test/bin/activate
> pip install Django
> pip install mongoengine
> cd Test/
> django-admin.py startproject db

然后我添加了行

from mongoengine import *
connect('tumblelog')
在settings.py中

然后我创建了这个简单的模型

from mongoengine import *

class User(Document):
email = StringField(required=True)
name = StringField(max_length=50)

然后我运行服务器

> python manage.py runserver

在shell(python manage.py shell)中我可以保存数据,如果我导入我的模型类但我无法读取它,我总是有相同的TypeError: init ()关键字必须是字符串!

-----切换到django-mongodb引擎----

我没有找到任何解决方案,所以我将使用django-mongodb-engine。我没有找到任何比较,但我尝试了两者,它非常相似。 我只是后悔django-mongodb-engine不处理继承原则。

我做错了什么? 提前谢谢!

2 个答案:

答案 0 :(得分:0)

使用all()方法

for user in User.objects.all():
    print user.first_name

答案 1 :(得分:0)

我们使用mongoengine 0.6.9时遇到了完全相同的问题。我并不认为这是一个理想的解决方案,但降级到0.6.5可以解决这个问题。