このトピックでは、必要がない場合に、関連するオブジェクトのカスケード削除を防ぐための良い方法を見つけました。
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はこのオブジェクトの別の記憶されたコピーを使用します。それはまだオブジェクトに関連付けられているため、削除しようとしています-whooooosh!...親戚にさようなら:)
データベースは私の前にアーキテクチャ化されていて、やや奇妙な方法で作成されていたため、これらの「related_names」を妥当な時間内にエスケープすることはできません。誰かがそのようなトラブルの回避策について聞いたことがありますか?