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
.您应该编辑您的问题以提供完整的回溯。