python - 在 MongoEngine 中实现双向关系

标签 python mongodb circular-reference bidirectional-relation mongoengine

我正在构建一个使用 MongoDB 和 MongoEngine 来存储数据的 Django 应用程序。为了呈现我的问题的简化版本,假设我想要两个类:用户和页面。每个页面都应该与一个用户相关联,每个用户一个页面。

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"

谁能解释为什么会抛出这个异常,我做错了什么,以及如何避免它?

最佳答案

这是正确的解决方案:

from mongoengine import *

class User(Document):
    name = StringField()
    page = ReferenceField('Page')

class Page(Document):
    content = StringField()
    user = ReferenceField(User)

使用单引号('Page')表示尚未定义的类。

关于python - 在 MongoEngine 中实现双向关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3885487/

相关文章:

python - Pyramid - fanstatic应用程序在apache wsgi模块下找不到静态资源

python - 使用 Python 计算 NDVI

arrays - 如何使用吗啡过滤mongo文档中的嵌入数组

MongoDB - 降序索引奇怪的行为

javascript - Typescript/Javascript 垃圾收集器是处理循环引用还是泄漏内存?

python - 网页抓取 : output different to original data

python - Folium & Series 对象没有属性 get_name

mysql - 无法为项目选择 MySQL 还是 MongoDB

php - PHP 的循环引用问题有多大,我应该担心吗?

php - 在 Symfony 中检测到循环引用