2

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

我的问题是如何正确覆盖它以进行更新而不是删除。我查看了 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()

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

4

0 回答 0