反向级联规则不会影响mongoengine对象的覆盖删除方法

时间:2018-12-27 09:45:00

标签: python mongodb mongoengine

我有两个文档对象(JobJobLog),一个对象引用了另一个(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安全删除时。

>>> job = Job()
>>> job.save()
>>> job_log = JobLog()
>>> job_log = job
>>> job_log.save()
>>> job.delete()

>>> JobLog.objects().all()
[]

一段时间后,我像这样覆盖delete的{​​{1}}方法:

JobLog

但是在删除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) 覆盖的delete方法时没有调用。

Job

已删除引用的>>> job = Job() >>> job.save() >>> job_log = JobLog() >>> job_log = job >>> job_log.save() >>> job.delete() >>> JobLog.objects().all() [] ,但未调用重写的JobLog方法。

1 个答案:

答案 0 :(得分:0)

我最终找到了一个解决方案,如果有人遇到这种问题,我将分享它。

我不知道为什么没有调用重写的<div class="switch-toggle switch-3 switch-candy"> <ng-container #buttonIcon *ngFor="let option of options" > <input type="radio" formControlName="state" [id]="option+i" [value]="option" /> <label [attr.for]="option+i"> {{option}} </label> </ng-container><a></a> </div> 方法的所有细节,但是似乎基础delete类将继承的类视为Document类,并将其称为超类方法。因此,未调用重写的delete方法。

该解决方案使用signals来确保在诸如删除和保存之类的方法之前或之后处理的操作。此代码段对我有用:

Document

blinker库提供了信号支持。使用mongoengine的信号之前,请确保已安装。