我正在使用 Django 中的 DeleteView 删除不同模型中的对象。
问题是我不希望对象被完全删除,而只是隐藏。首先,我认为保持我的视图不变是有意义的,而是覆盖每个模型中的删除方法,如下所示
def delete(self, force=False):
if force:
return super(ModelName, self).delete()
else:
self.is_deleted = True
self.save()
但后来我注意到删除方法不会在批量删除中调用,所以这种方法风险太大。
有人可以推荐一个好方法吗?我仍然想保持 DeleteView 的正常行为,但它应该只是“停用”对象而不是删除它们。
删除视图如下:
def delete(self, request, *args, **kwargs):
"""
Calls the delete() method on the fetched object and then
redirects to the success URL.
"""
self.object = self.get_object()
success_url = self.get_success_url()
self.object.delete()
return HttpResponseRedirect(success_url)
如果我替换为就足够self.object.delete()
了
self.object.is_deleted = True
self.object.save()
当我将我的对象标记为已删除时,如何确保我的查询集不会包含已删除的对象?我可以简单地替换 ListView 中的 get_queryset() ,但它们应该被排除在页面上的任何查询集中,所以我想知道如果我自定义对象管理器是否会得到更好的结果?
我一直在看 django-reversion。如果我想恢复它们,我可以简单地以正常方式删除所有对象然后使用 django-reversion 吗?这种解决方案有什么缺点吗?