1

本主题中,我找到了一种在不必要时防止级联删除相关对象的好方法。

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()

但是当我们使用带有“related_name”参数的 ForeignKey 字段时,这种方法似乎失败了。在我看来,“clear()”方法可以正常工作并保存“解除关联”对象的实例。但是,在删除时,django 使用了这个对象的另一个记忆副本,因为它仍然与我们试图删除的对象相关联 - 哇哦!...再见亲戚:)

数据库是在我之前构建的,而且方式有点奇怪,所以我无法在合理的时间内逃避这些“相关名称”。有人听说过解决这种麻烦的方法吗?

4

1 回答 1

2

再次重新读取对象并删除它呢?

to_delete = self.__class__.objects.get(pk=self.pk)
to_delete.delete()

这样被删除的对象就是一个新的副本。问题是正确地完成原始delete()方法必须做的所有其他事情,比如信号调用、返回正确的值等等......

于 2010-08-06T18:26:06.820 回答