当我设置 'deleted' 标志时,Django 表行被 ORM 神奇地隐藏了

标签 django postgresql orm

在继承的代码库中工作。

当我从 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 文档,但没有看到任何表明仅具有“已删除”列即可进行软删除的信息。

我的问题是:

  1. Django 有某种自动软删除支持吗?
  2. 如果是这样,我在哪里可以找到文档?
  3. 如果不是,是否还有其他一些我不理解的自动机制?

最佳答案

@knbk 带我找到答案:

有一个与模型关联的管理器类,其 get_queryset() 方法通过“已删除”标志过滤所有查询集操作。

关于当我设置 'deleted' 标志时,Django 表行被 ORM 神奇地隐藏了,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45247493/

相关文章:

transactions - 检测错误以决定是回滚还是提交

orm - 什么时候懒惰评估没有用?

python - 在 Django 中显示漂亮的代码

django - 无法启动 gunicorn.service : Unit gunicorn. 找不到服务

django - 将外键下拉列表替换为带有添加/编辑图标的文本框 - Django

sql - 使用数据作为外键删除具有其他表的 SQL 中的多个条目

PostgreSQL INSERT ON CONFLICT UPDATE (upsert) 使用所有排除的值

orm - ORM是面向对象编程特有的问题吗?

mysql - 在 HasOne 关系中获取关联错误

python - 如何将不同的应用程序合并到一个网页中?