3

「ユーザー」モデルを使用して「ユーザー」コレクションにデータを追加したデータベース「タンブルログ」(mongoengine を使用) があります。

デシベル.ユーザー.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 シェルで試してみると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

そして、シェル (python manage.py シェル) では、モデル クラスをインポートするとデータを保存できますが、それを読み取ることができません。常に同じ TypeError: init () キーワードは文字列でなければなりません!

-----django-mongodb エンジンへの切り替え----

解決策が見つからなかったため、django-mongodb-engine を使用します。比較は見つかりませんでしたが、両方を試してみましたが、非常に似ています。django-mongodb-engine が継承の原則を処理しないことを後悔しています。

私は何を間違っていますか?前もって感謝します!

4

2 に答える 2

0

mongoengine 0.6.9 を使用してまったく同じ問題が発生しました。これを理想的な解決策として提案しているわけではありませんが、0.6.5 にダウングレードすることでこの問題は解決しました。

于 2012-05-16T14:51:50.597 に答える
0

all() メソッドを使用する

for user in User.objects.all():
    print user.first_name
于 2012-05-14T12:07:44.033 に答える