我有两个文档对象(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
安全删除时。
>>> 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
方法。
答案 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的信号之前,请确保已安装。