В этой теме Я нашел хороший способ предотвратить каскадное удаление связанных объектов, когда это не нужно.
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 () работает нормально и сохраняет экземпляр «деассоциированного» объекта. Но затем, при удалении, django использует еще одну запомненную копию этого самого объекта, и, поскольку он все еще связан с объектом, который мы пытаемся удалить, - whooooosh! ... до свидания родственникам:)
База данных была спроектирована до меня, и несколько странным образом, так что я не могу избежать этих "related_names" в разумные сроки. Кто-нибудь слышал об обходном пути для такой проблемы?