如何在 mongoengine 中调用保存方法.嵌入式文档类


import mongoengine
class Model1(mongoengine.DynamicDocument):
    name = mongoengine.StringField()
    addr = mongoengine.EmbeddedDocumentField(Model2)
class Model2(mongoengine.EmbeddedDocument):
    loc =  mongoengine.StringField()
    # do some stuff
    def save(self, *args, **kwargs):
        print "test line print...."
        super(Model2, self).save(*args, **kwargs)

现在当我保存Model1实例时。 它不调用保存方法

m2 = Model2(loc='some text')
m1 = Model1(name='name')
m1.addr = m2
m1.save()

如果我尝试在 Model2 上显式调用 save 方法,它会抱怨NoneType object has no attr save

m2

嵌入式文档)确实有一个save方法。它调用m1.save() .请参阅代码。

调用 m1.save() 将在所有嵌入文档上调用 save() 的假设是错误的。(我掉进了同样的陷阱...

因此,不幸的是,您无法安全地覆盖嵌入文档的保存方法,期望每次保存文档时都会调用该方法。

但是,您可以将其添加从m1.save()调用的pre_save方法(或在文档中捕获pre_save信号的回调中)。

但是,调用m2.save()应调用m1.save()并保存整个文档。我无法解释此错误:NoneType object has no attr save.您应该编辑您的问题以提供完整的回溯。

相关内容

最新更新