2

我有以下 Python 代码使用MongoEngine(通过 pip 安装 0.7.9 )连接到MongoDB(通过 MacPorts 安装 2.0.1)数据库:

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'

您可能会注意到,错误是由 MongoEngine 代码中的一行代码产生的,该代码安装在env带有virtualenv的虚拟环境中。

Post当我使用 . 将文档嵌入到另一个文档中EmbeddedDocumentField时,以及当我只是将以前的代码粘贴到 Python 解释器中时(直到现在,我只是使用IPython而不是 vanilla Python 解释器) ,实际上都会出现这个错误。

我已经尝试过调试pdb和搜索互联网,但我没有找到关于这个问题的任何有用信息。我唯一能说的是self._metaNone这会导致引发异常。但是为什么会这样None或者那应该意味着什么……我不知道。

为什么我会收到此错误?它肯定在 MongoEngine 的代码中,但它是由 MongoEngine 还是由我的代码/数据引起的?我该如何解决?

提前致谢。

PS:作为附加信息,我计划将它与Django一起使用,但之前的代码可以与 Django 分开运行,并且我已经完成了类似的测试(没有 Django,只使用 IPython,就像我之前提到的那样)。

4

0 回答 0