【发布时间】:2011-02-05 07:37:42
【问题描述】:
在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()
但是当我们使用带有“related_name”参数的 ForeignKey 字段时,这个方法似乎失败了。 在我看来,“clear()”方法可以正常工作并保存“解除关联”对象的实例。但是,在删除时,django 使用了这个对象的另一个记忆副本,因为它仍然与我们试图删除的对象相关联——哇哦! ...再见亲戚:)
数据库是在我之前构建的,而且方式有点奇怪,所以我无法在合理的时间内逃避这些“related_names”。有人听说过解决此类问题的方法吗?
【问题讨论】:
-
请注意,在最新版本的 Django 中,人们会使用
on_delete=SET_NULL而不是这个 hack。
标签: django django-models foreign-key-relationship cascading-deletes