我的数据库设计需要在删除行时在表行上设置“已删除”标志,而不是实际删除行。我正在使用在标记对象被删除时调用模型的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()
这两种方法都有效,但我不确定哪种方法是正确的。