在this topic中,我找到了一种防止关联对象级联删除的好方法,当它不是必需的时候。
class Factures(models.Model):
idFacture = models.IntegerField(primary_key=True)
idLettrage = models.ForeignKey('Lettrage', db_column='idLettrage', null=True, blank=True)
class Paiements(models.Model):
idPaiement = models.IntegerField(primary_key=True)
idLettrage = models.ForeignKey('Lettrage', db_column='idLettrage', null=True, blank=True)
class Lettrage(models.Model):
idLettrage = models.IntegerField(primary_key=True)
def delete(self):
"""Dettaches factures and paiements from current lettre before deleting"""
self.factures_set.clear()
self.paiements_set.clear()
super(Lettrage, self).delete()
但是当我们将ForeignKey字段与“related_name”参数一起使用时,此方法似乎失败了。 在我看来,“clear()”方法工作正常,并保存“deassociated”对象的实例。但是,在删除时,django使用了这个对象的另一个记忆副本,因为它仍然与我们试图删除的对象相关联 - whooooosh! ...再见亲戚:)
数据库在我之前被架构,并且以某种奇怪的方式,所以我无法在合理的时间内逃避这些“related_names”。有人听说过这样的麻烦的解决办法吗?
答案 0 :(得分:2)
如何重新读取对象并删除它?
to_delete = self.__class__.objects.get(pk=self.pk)
to_delete.delete()
这种方式是删除的对象是一个新的新副本。问题是要正确地完成原始delete()
方法必须做的所有事情,比如信号调用,返回正确的值等等......