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_mongo
objectでメソッドを呼び出すと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._meta
はNone
、それが原因で例外が発生するということです。しかし、それがなぜなのか、それがNone
何を意味するのか…私にはわかりません。
なぜこのエラーが発生するのですか? それは間違いなくMongoEngineのコードにありますが、MongoEngineまたは私のコード/データが原因ですか? どうすれば解決できますか?
前もって感謝します。
PS: 追加情報として、これをDjangoで使用する予定ですが、前のコードは Django とは別に実行でき、そのようなテストを行いました (前述のように、Django なしで、IPython のみで)。