2012-05-14 56 views
3

我有一个数据库“的tumblelog”(使用mongoengine),其中我添加了一些数据中的“用户”集合与“用户”模式:与mongoengine和django的查询

db.user.find()

... 
{ "_id" : ObjectId("4fb0c9494ca88402dd000000"), "_types" : [ "User" ], "first_name" : "John", "last_name" : "Doe", "_cls" : "User", "email" : "[email protected]" } 
{ "_id" : ObjectId("4fb0cb9d4ca88402ec000000"), "_types" : [ "User" ], "first_name" : "Joe30", "last_name" : "Foe", "_cls" : "User", "email" : "[email protected]" } 

当我尝试User.objects在Django的壳,我得到以下错误:

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 

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

-----切换到Django的MongoDB的引擎----

我没有找到任何解决方案,因此我将使用Django的MongoDB的引擎。我没有找到任何比较,但我尝试了两个,它非常相似。 我只是后悔django-mongodb引擎不处理继承原则。

我在做什么错? 在此先感谢!

+0

它在循环或打印线上出现错误吗? – Ross

+0

它在循环中出错 –

+0

你能提供示例数据吗?数据字典中有什么? – Ross

回答

0

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

+0

我喜欢测试用例/一些示例数据, t复制这个。 – Ross

+0

我在这个简单的项目中有错误:http://www.mediafire.com/?1iejsf3g3pyzc11 –

+0

一个更好的例子(使用virtualenv,没有SQL和最新的django和mongoengine的全新安装):http:// www。 mediafire.com/?9d00eitagggueui –

0

所有使用中的()方法

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

我试过了,但我有同样的错误。 –

+0

我更新了我的帖子。 –

+1

User.objects.all()的工作..告诉我它显示的错误,如果你使用objects.all() – Crims0n