在继承的代码库中工作。
当我从 API 或管理站点查看时,我有一个包含 2 个对象的表,但当我在 PostgreSQL 中执行 select * 时,它有 3 个对象。
name | created | deleted
-------+-------------------------------+------------
Sweet | 2017-07-21 16:31:28.556949-05 | t
qwer | 2017-07-21 16:36:03.096954-05 | t
asdf | 2017-07-21 16:35:15.585589-05 | f
(3 rows)
该表中有一个“已删除”标志,它似乎是一个自动软删除标志。如果我通过 SQL 将标志设置为 true,它对 ORM 是可见的。如果我通过 SQL 将标志设置为 false,它对 ORM 是隐藏的。
这种特殊类型的 automagic 非常无用,我想禁用它,但我想在删除该列之前了解它在 Django 中的工作原理。
我没有使用任何特殊的东西来支持这种行为。我找到了描述如何通过子类化支持它的特殊模型来实现软删除的文章,但我没有这样做。这只是 models.Model 的普通子类。我用 Google 搜索并搜索了 Django 文档,但没有看到任何表明仅具有“已删除”列即可进行软删除的信息。
我的问题是:
- Django 有某种自动软删除支持吗?
- 如果是这样,我在哪里可以找到文档?
- 如果不是,是否还有其他一些我不理解的自动机制?
最佳答案
@knbk 带我找到答案:
有一个与模型关联的管理器类,其 get_queryset() 方法通过“已删除”标志过滤所有查询集操作。
关于当我设置 'deleted' 标志时,Django 表行被 ORM 神奇地隐藏了,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45247493/