Django - 如何正确覆盖模型的delete()方法来更新(软删除)而不是删除

时间:2012-11-13 20:36:48

标签: python django

我的数据库设计需要在删除行时在表行上设置“已删除”标志,而不是实际删除行。我正在使用在标记对象被删除时调用模型的delete()函数的formsets。这意味着我需要覆盖模型的删除功能。使用信号不是一种选择。

我的问题是如何正确覆盖它以进行更新而不是删除。我查看了models.Model.delete函数,它使用django.db.models.deletion.Collector类执行一些复杂的操作。收集器可以删除并更新值。我能够覆盖删除方法只更新如下:

class CustomerInfo(models.Model):
  ...
  def delete(self, using=None):        
    collector = Collector(using=using)
    collector.add_field_update(self._meta.get_field('deleted'), True, [self])
    collector.delete()

但我不确定这是否是正确的方法。或者我可以覆盖它如下。

def delete(self, using=None):
    self.deleted = True
    self.save()

这两种方法都有效,但我不确定哪种方法是正确的。

0 个答案:

没有答案