相同的表Django ORM软删除方法好吗?

时间:2009-06-22 17:36:59

标签: django django-models django-orm soft-delete

我正在使用以下设置在Django中实现软删除。我对Django不太熟悉,所以我很感激我对可能遇到的陷阱的任何反馈。我特别不喜欢继承QuerySet。

基本想法是,deleteMyModel的第一次调用会将MyModel的{​​{1}}更改为当前日期时间。第二个date_deleted实际上会删除该对象。 (捕获delete需要两个覆盖,一个在对象上,另一个在delete上,可以绕过对象的QuerySet方法。)由于默认管理器将隐藏已删除的对象,删除的对象消失,必须通过delete经理明确要求。

使用此设置需要定义deleted_objectsDeletionQuerySet,并将DeletionManagerdate_deletedobjects添加到您的模型中。

谢谢,

P.S。,忘了提到这种从默认管理器中过滤对象的方法是strongly discouraged

deleted_objects

1 个答案:

答案 0 :(得分:1)

我认为当前在使用,流行,技术的任何事情,没有办法有问题域不可知,通用软删除。 我认为它与历史/历史数据库系统的关系比我们使用的更多。 我建议你不要绕过django的删除(这是一个很难删除)。保持原样。

您最有可能在我们的系统中拥有的“删除”,占90%,视觉删除......

在这方面,尝试为您的特定域问题找到带删除的同义词,并从项目的开头执行此操作。

因为抱怨IsVisible,IsUnpublished(甚至是IsDeleted)搞砸了你的查询,他们抱怨你必须小心包含它们......

但这显然是对域名问题的无知,如果域中有可以隐藏或未发布的对象 - 当然当你查询要显示的所有对象的列表时,你应该从开始,查询所有不可见和未发布的对象,因为这是您的域名问题以完整形式解决的方式。

干杯。