私はdjango管理者でソフト削除を使用しています。問題は、外部キー項目を削除すると、リンクされているすべての項目の削除がトリガーされないように見えることです。または、そうかもしれませんが、モデルにあるカスタム定義削除を実行していません。
-個人を削除すると、論理的に削除されますが、関連するアカウントはそのまま残ります。
-論理的な削除を削除すると、個人を削除するとアカウントも削除されますが、これは正しいです。
したがって、理想的には、個人を削除するときに、個人をソフト削除し、その個人を参照しているアカウントもソフト削除します(非アクティブとしてマークします)。
class Person(models.Model):
description = models.CharField(max_length=100)
def delete(self, *args, **kwargs):
self.active = False
self.deleted_date = datetime.now()
self.save()
class Account(models.Model):
name = models.CharField(max_length=50)
person = models.ForeignKey(Person, null=True, blank=True)
active = models.BooleanField(default=True, editable=False)
objects = SoftDeleteManager()
def delete(self, *args, **kwargs):
self.active = False
self.deleted_date = datetime.now()
self.save()
def __unicode__(self):
return "%s: %s" % (self.type,self.name)
更新:質問を更新しました。Person モデルでソフト削除を実行しているとは言いませんでした。また、def の削除がオーバーライドされていない場合、カスケードの削除が機能することを追加しましたが、削除をオーバーライドすると、カスケードはトリガーされません。