【问题标题】:Circular dependency with reverse_delete_rule in MongoengineMongoengine中带有reverse_delete_rule的循环依赖
【发布时间】:2017-06-30 11:27:22
【问题描述】:

我有以下相互依赖的模型:

from mongoengine import *

class DocumentA(Document):
    docB = ReferenceField('DocumentB', reverse_delete_rule=CASCADE)

class DocumentB(Document):
    docA = ReferenceField('DocumentA', reverse_delete_rule=CASCADE)

我收到以下错误:

mongoengine.errors.NotRegistered: `DocumentB` has not been registered in the document registry.
            Importing the document class automatically registers it, has it
            been imported?

如果我删除第一个reverse_delete_rule,这个错误就会消失:

from mongoengine import *

class DocumentA(Document):
    docB = ReferenceField('DocumentB')

class DocumentB(Document):
    docA = ReferenceField('DocumentA', reverse_delete_rule=CASCADE)

工作正常。

有没有办法保留reverse_delete_rule

【问题讨论】:

    标签: python mongoengine circular-dependency


    【解决方案1】:

    来自MongoEngine ReferenceField documentation

    注册删除规则的替代语法(在以下情况下很有用) 实现双向删除规则)

    class Bar(Document):
        content = StringField()
        foo = ReferenceField('Foo')
    
    Foo.register_delete_rule(Bar, 'foo', NULLIFY)
    

    所以你的代码变成了:

    from mongoengine import *
    
    class DocumentA(Document):
        docB = ReferenceField('DocumentB')
    
    class DocumentB(Document):
        docA = ReferenceField('DocumentA', reverse_delete_rule=CASCADE)
    
    DocumentB.register_delete_rule(DocumentA, 'docB', CASCADE)
    

    【讨论】:

      猜你喜欢
      • 2012-11-14
      • 1970-01-01
      • 1970-01-01
      • 2019-11-17
      • 1970-01-01
      • 2019-06-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多