Python 在DeleteView中将标记为已删除,而不是实际删除

Python 在DeleteView中将标记为已删除,而不是实际删除,python,django,django-reversion,Python,Django,Django Reversion,我正在使用Django中的DeleteView删除不同模型中的对象 问题是,我不希望对象被完全删除,而只是隐藏。首先,我认为让视图保持原样是有意义的,但是在每个模型中重写delete方法,如下所示 def delete(self, force=False): if force: return super(ModelName, self).delete() else: self.is_deleted = True self.save(

我正在使用Django中的DeleteView删除不同模型中的对象

问题是,我不希望对象被完全删除,而只是隐藏。首先,我认为让视图保持原样是有意义的,但是在每个模型中重写delete方法,如下所示

def delete(self, force=False):
    if force:
        return super(ModelName, self).delete()
    else:
        self.is_deleted = True
        self.save()
但是我注意到delete方法不会在批量删除中被调用,所以这个方法风险太大

有人能推荐一个好的方法吗?我仍然希望保持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(),但是页面上的任何queryset都不应该包含它们,所以我想知道如果我自定义对象管理器,是否会得到更好的结果


我一直在看django回归。如果我想恢复它们,我可以简单地以正常方式删除所有对象,然后使用django恢复吗?此解决方案有任何缺点吗?

当我将对象标记为已删除时,如何确保我的查询集不包含已删除的对象

如注释所述,理解您的
的字段将被删除

我一直在看django回归。如果我想恢复它们,我可以简单地以正常方式删除所有对象,然后使用django恢复吗

是的,只要你把删除的内容用复写的形式包装起来。这可以简单到包装所有删除和保存:

MIDDLEWARE_CLASSES = (
    'reversion.middleware.RevisionMiddleware',
    # Other middleware goes here...
)
这个解决方案有什么缺点吗

我没有发现,它得到了很好的支持,除了删除支持外,它还具有版本跟踪功能

但是我注意到delete方法不会被批量调用 删除,因此此方法风险太大

您可以为此编写自己的查询集,并将其用作\u管理器。同一查询集可以隐藏已删除的字段,使其无法显示。请记住为检索所有已删除字段留下一些方法。

已经询问: