我在我的 django 管理员中使用软删除,就像这样。问题是当我删除一个外键项目时,它似乎并没有触发它链接到的所有项目的删除。或者它可能会,但它没有运行我在我的模型上拥有的自定义def delete 。
- 如果我删除一个人,那么他们将被软删除,但相关帐户保持不变。
- 如果我删除软删除,那么当我删除一个人时,帐户也会被删除,这是正确的。
因此,理想情况下,当我删除一个人时,我希望它软删除该人,并且引用该人的帐户也被软删除(将它们标记为非活动)。
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 删除未被覆盖时,级联删除工作,但是当我覆盖删除时,级联不会触发。