我有以下 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._meta
,None
这会导致引发异常。但是为什么会这样None
或者那应该意味着什么……我不知道。
为什么我会收到此错误?它肯定在 MongoEngine 的代码中,但它是由 MongoEngine 还是由我的代码/数据引起的?我该如何解决?
提前致谢。
PS:作为附加信息,我计划将它与Django一起使用,但之前的代码可以与 Django 分开运行,并且我已经完成了类似的测试(没有 Django,只使用 IPython,就像我之前提到的那样)。