我正在构建一个Django应用程序,它使用MongoDB和MongoEngine来存储数据。为了给出我的问题的一个简化版本,假设我想有两个类: User和Page。每个页面都应该与一个用户相关联,并且每个用户都应该与一个页面相关联。
from mongoengine import *
class Page(Document):
pass
class User(Document):
name = StringField()
page = ReferenceField(Page)
class Page(Document):
content = StringField()
user = ReferenceField(User)
(请注意,必须在用户之前定义页面。如果我缺少一种处理循环依赖的Pythonic方法,请让我知道。)每个文档都可以很好地创建和保存,但是将页面分配给用户会抛出错误。
u = User(name='Jeff')
u.save()
p = Page(content="I'm a page!")
p.save()
p.user = u
p.save()
u.page = p
u.save()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "build\bdist.win32\egg\mongoengine\document.py", line 71, in save
File "build\bdist.win32\egg\mongoengine\base.py", line 303, in validate
mongoengine.base.ValidationError: Invalid value for field of type "ReferenceField"
谁能解释一下为什么抛出这个异常,我做错了什么,以及如何避免它?
发布于 2010-10-09 04:02:20
这是正确的解决方案:
from mongoengine import *
class User(Document):
name = StringField()
page = ReferenceField('Page')
class Page(Document):
content = StringField()
user = ReferenceField(User)
使用单引号('Page')表示尚未定义的类。
发布于 2011-04-16 01:54:52
在这种情况下,Drew的答案是最好的方法,但我想提一下,您也可以使用GenereicReferenceField:
from mongoengine import *
class User(Document):
name = StringField()
page = GenericReferenceField()
class Page(Document):
content = StringField()
user = ReferenceField(User)
但同样,对于您的特定问题,请使用单引号中的类名。
https://stackoverflow.com/questions/3885487
复制相似问题