如何在Django模型中轻松地将记录标记为已删除而不是实际删除它们?

Mik*_*keN 12 django django-models

我想将它们标记为"已删除"并将其隐藏在我的活动查询中,而不是删除我的Django应用程序中的记录.我这样做的主要原因是为用户提供取消删除选项,以防他们意外删除记录(某些后端审计跟踪也可能需要这些记录.)

有很多外键关系,所以当我将记录标记为已删除时,我必须将"删除"标记"级联"到这些记录中.我应该使用哪些工具,现有项目或方法来执行此操作?

mad*_*ulf 11

Django提供了开箱即用的精确机制.

您可以通过相关对象更改用于访问的管理器.如果新的自定义管理器在布尔字段上过滤对象,则标记为非活动的对象将不会显示在您的请求中.

有关详细信息,请参见此处:http: //docs.djangoproject.com/en/dev/topics/db/managers/#using-managers-for-related-object-access

  • 但我不相信来自其他对象的搜索尊重这一点。即,如果您从相关模型中搜索,它将使用忽略已删除记录的管理器。这意味着标记为已删除的记录仍将保持其关系完好无损 - 这可能不是您想要的。 (2认同)
  • 对.使用管理器来控制哪些对象是可访问的,只有在使用该类时才有效.假设A类正在使用管理器来隐藏"已删除"的对象,那么`A.objects`将隐藏已删除的对象.但是如果A与B类相关,那么`B.filter(a__name ='smith')`将搜索所有A对象,甚至是已删除的对象. (2认同)