我有两个document对象(Job
和JobLog
),其中一个引用了另一个(JobLog有Job的引用字段)。引用用reverse_delete_rule=CASCADE
定义。在
# Job class
class Job(db.Document):
(fields)
class JobLog(db.Document):
(fields)
job = ReferenceField(Job, required=True, reverse_delete_rule=CASCADE)
当我删除Job
对象并安全删除引用的JobLog
时。在
过了一会儿,我重写了delete
的delete
方法,如下所示:
class JobLog(db.Document):
(fields)
job = ReferenceField(Job, required=True, reverse_delete_rule=CASCADE)
def delete(self, signal_kwargs=None, **write_concern):
(some operations)
print("Delete method called.")
super(JobLog, self).delete(signal_kwargs, **write_concern)
但是在删除Job
时,重写的delete方法没有调用。在
引用的JobLog
已删除,但未调用重写的delete
方法。在
我最后给出了一个解决方案,如果有人遇到这种问题,我会和大家分享。在
我不知道为什么被重写的
delete
方法没有被调用,但是基本的Document
类将继承的类看作Document
类,并调用它的超级类方法。因此未调用重写的delete方法。在解决方案是使用signals来确保在delete和save等方法之前或之后处理的操作。这个片段对我有用:
信号支持由blinker库提供。在使用mongoengine信号之前,请确保已安装。在
相关问题 更多 >
编程相关推荐