当我删除table-A
的记录时,我想将行移至table-A-history
表。
是否足以覆盖经理的delete()
方法来实际移动和删除?
所有soft delete
我都能找到使用bool标志来表示软删除。
答案 0 :(得分:1)
是和否。
如果覆盖delete()
方法,则每次删除单个对象时都会调用它:
my_obj.delete()
但是这种方法不会调用bulk queryset's delete()
。
MyModel.objects.filter(some=value).delete()
我怀疑您可以为此模型创建custom QuerySet并覆盖它的delete()
方法。
答案 1 :(得分:1)
我从来没有实际实现过你试图制作的功能,但我认为覆盖核心功能可能不是最好的主意,特别是因为它可能会让你感到有些困惑。我的建议是创建一个自定义删除方法,如下所示:
class Destination(modelsModel):
title = models.Charfield(max_length=9000)
[...]
class ItemToMove(models.Model):
title = models.CharField(max_length=9000)
[...same fields as "Destination" model...]
def delete_and_move(self):
Destination.objects.create(title=self.title, [...])
self.delete()
return "Object successfully deleted and moved"
def __unicode__(self):
return self.title
您可以通过键入obj.delete_and_move()
来删除单个对象,也可以运行items = ItemToMove.objects.filter(title='barney')
,然后通过以下方式删除:
for i in items:
i.delete_and_move()