2

MongoEngine (pip 経由でインストールされた 0.7.9) を使用してMongoDB (MacPorts 経由でインストールされた 2.0.1) データベースに接続するための次の Python コードがあります。

import datetime
from mongoengine import *

connect('mydb')

class Post(EmbeddedDocument):
    title = StringField(required=True)
    description = StringField(required=True)
    author = StringField(required=True)
    pub_date = DateTimeField(required=True, default=datetime.datetime.now)

p = Post()
p.author = "genba"
p.title = "Test post"
p.description = "This is a test post"

to_mongoobjectでメソッドを呼び出すとp、次のトレースバックが表示されます。

env/lib/python2.7/site-packages/mongoengine/base.pyc in to_mongo(self)
   1040         # Only add _cls and _types if allow_inheritance is not False
   1041         if not (hasattr(self, '_meta') and
-> 1042            self._meta.get('allow_inheritance', ALLOW_INHERITANCE) == False):
   1043             data['_cls'] = self._class_name
   1044             data['_types'] = self._superclasses.keys() + [self._class_name]

AttributeError: 'NoneType' object has no attribute 'get'

envお気づきかもしれませんが、エラーは、 virtualenv を使用して仮想環境にインストールされたMongoEngineのコードのコード行によって生成されます。

このエラーは、実際には、Postを使用してドキュメントを別のドキュメントに埋め込んだEmbeddedDocumentField場合と、前のコードを Python インタープリターに貼り付けた場合の両方で発生します (今までは、普通の Python インタープリターの代わりにIPythonを使用していました)。

インターネットでデバッグしpdbて検索しようとしましたが、この問題に関する有用な情報を見つけることができませんでした。私が言える唯一のことself._metaNone、それが原因で例外が発生するということです。しかし、それがなぜなのか、それがNone何を意味するのか…私にはわかりません。

なぜこのエラーが発生するのですか? それは間違いなくMongoEngineのコードにありますが、MongoEngineまたは私のコード/データが原因ですか? どうすれば解決できますか?

前もって感謝します。

PS: 追加情報として、これをDjangoで使用する予定ですが、前のコードは Django とは別に実行でき、そのようなテストを行いました (前述のように、Django なしで、IPython のみで)。

4

0 に答える 0