django-reversion 撤消功能 - 恢复多个对象

2024-04-11

我正在尝试使用 django-reversion 在 django 项目中实现“撤消”功能,以防用户意外修改多个对象。使用管理面板不起作用,因为必须一一恢复对象。

我的问题是我无法创建包含多个对象数据的修订版本。
即使当我这样做时

with reversion.create_revision():
    Res.object.all().delete()

那么我无法访问对该更改进行分组的修订版。它以“一个对象一个版本.模型.版本”的方式进行分割。

In [103]: reversion.models.Version.objects.all()
Out[103]: [<Version: #00001>, <Version: #00002>]

我也尝试过通过

reversion.models.Revision.objects.all().order_by('-date_created')[0].version_set.all()

但它也只为一个已删除的 Res 对象返回一个版本。 好像我错过了一些东西。


tl;dr - 修订并不是您“撤消”的事情。这是你恢复的东西。因此,撤消就是找到要撤消的事情之前发生的最新修订,并通过调用 revert() 来恢复它。

django-reversion 的数据模型基于修订和版本。修订版由一个或多个版本组成,版本代表一个 Django 模型的序列化状态。

django-reversion 允许您回滚到任何先前版本或修订版的状态。这类似于撤消功能,但不完全相同。

考虑以下工作流程:

# Create a Revision containing two Versions.
with reversion.create_revision():
    a = SomeModel.objects.create(name="A version 1")
    b = SomeModel.objects.create(name="B version 1")

# Create a Revision containing to Versions.
with reversion.create_revision():
    a.name = "A version 2"
    a.save()
    b.name = "B version 2"
    b.save()

此时,您可以通过恢复到最后一个修订来“撤消”第二次编辑。

# Revert just 'a' to version 1. This is the last but one revision.
reversion.get_for_object(a)[1].revert()

# Or, revert 'a' and 'b' to version 1.
reversion.get_for_object(b)[1].revision.revert()

您还可以像这样删除和恢复:

# Store the pk of 'a', then delete it.
a_pk = a.pk
a.delete()

# Recover 'a' via it's primary key.
reversion.get_deleted(SomeModel).filter(object_id=a_pk).revert()

因此,您可以恢复到单个模型或保存在一起的一组模型的先前状态。但是,无法说“撤消我刚刚所做的事情”。相反,你必须告诉回归“变得像此时的你一样”。

在你的情况下,如果你想撤消批量删除,你可以这样做:

# Save a revision containing all SomeModel instances.
with reversion.create_revision():
    for obj in SomeModel.objects.all():
        obj.save()

# Delete them all.
SomeModel.objects.delete()

# Revert back to the previous revision, where nothing was deleted.
Revision.objects.filter(version__content_type=ContentType.objects.get_for_model(SomeModel)).order_by("-date_created")[0].revert()

然而,在这种情况下,您将得到一个非常愚蠢的竞争条件,因为可以随时创建 SomeModel 的其他修订。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

django-reversion 撤消功能 - 恢复多个对象 的相关文章

  • Pandas 连接问题:列重叠但未指定后缀

    我有以下数据框 print df a mukey DI PI 0 100000 35 14 1 1000005 44 14 2 1000006 44 14 3 1000007 43 13 4 1000008 43 13 print df b
  • 组和平均 NumPy 矩阵

    假设我有一个任意的 numpy 矩阵 如下所示 arr 6 0 12 0 1 0 7 0 9 0 1 0 8 0 7 0 1 0 4 0 3 0 2 0 6 0 1 0 2 0 2 0 5 0 2 0 9 0 4 0 3 0 2 0 1 0
  • 使用 pandas 将字符串对象转换为 int/float

    import pandas as pd path1 home supertramp Desktop 100 life 180 data csv mydf pd read csv path1 numcigar Never 0 1 5 Ciga
  • 将一维数组转换为下三角矩阵

    我想将一维数组转换为较低的零对角矩阵 同时保留所有数字 我知道numpy tril函数 但它用零替换了一些元素 我需要扩展矩阵以包含所有原始数字 例如 10 20 40 46 33 14 12 46 52 30 59 18 11 22 30
  • 如何使用 i18n 切换器将“LANGUAGE_CODE”保存到数据库,以便在 Django 中的不同浏览器中语言不会更改?

    有什么办法可以改变它的值LANGUAGE CODE单击按钮 发送请求 时 settings py 中的变量会动态变化吗 我希望用户设置自己的 默认语言 他们的帐户 现在 用户可以使用下拉列表选择他们的首选语言 并且网站会得到完美的翻译 并且
  • 对于相同的查询,MySQL Workbench 比 Python 快得多

    MySQL Workbench 中的以下查询需要 0 156 秒才能完成 SELECT date time minute price id FROM minute prices WHERE contract id 673 AND TIMES
  • scikit-learn 和tensorflow 有什么区别?可以一起使用它们吗?

    对于这个问题我无法得到满意的答案 据我了解 TensorFlow是一个数值计算库 经常用于深度学习应用 而Scikit learn是一个通用机器学习框架 但它们之间的确切区别是什么 TensorFlow 的目的和功能是什么 我可以一起使用它
  • Django 模型字段默认基于另一个模型字段

    我使用 Django Admin 构建一个管理站点 有两张表 一张是ModelA其中有数据 另一个是ModelB里面什么也没有 如果一个模型字段b b in ModelB为None 可以显示在网页上 值为ModelA的场a b 我不知道该怎
  • Tensorflow 不分配完整的 GPU 内存

    Tensorflow 默认分配所有 GPU 内存 但我的新设置实际上只有 9588 MiB 11264 MiB 我预计大约 11 000MiB 就像我的旧设置一样 张量流信息在这里 from tensorflow python client
  • Pandas groupby apply 执行缓慢

    我正在开发一个涉及大量数据的程序 我正在使用 python pandas 模块来查找数据中的错误 这通常工作得非常快 然而 我当前编写的这段代码似乎比应有的速度慢得多 我正在寻找一种方法来加快速度 为了让你们正确测试它 我上传了一段相当大的
  • 如何分析组合的 python 和 c 代码

    我有一个由多个 python 脚本组成的应用程序 其中一些脚本正在调用 C 代码 该应用程序现在的运行速度比以前慢得多 因此我想对其进行分析以查看问题所在 是否有工具 软件包或只是一种分析此类应用程序的方法 有一个工具可以将 python
  • 根据列索引重命名 Dataframe 列

    是否有内置函数可以按索引重命名 pandas 数据框 我以为我知道列标题的名称 但事实证明第二列中有一些十六进制字符 根据我接收数据的方式 我将来可能会在第 2 列中遇到这个问题 因此我无法将这些特定的十六进制字符硬编码到 datafram
  • Django Rest Framework POST 更新(如果存在或创建)

    我是 DRF 的新手 我阅读了 API 文档 也许这是显而易见的 但我找不到一个方便的方法来做到这一点 我有一个Answer与 a 具有一对一关系的对象Question 在前端 我曾经使用 POST 方法来创建发送到的答案api answe
  • 在 matplotlib 中绘制多边形的并集[重复]

    这个问题在这里已经有答案了 我正在尝试绘制几个多边形的并集matplotlib 具有一定的 alpha 水平 我当前的代码在交叉点处颜色较深 有没有办法让交叉路口与其他地方的颜色相同 import matplotlib pyplot as
  • python dicttoxml 多次使用相同的键

    我正在尝试做如下所示的 xml
  • 更新 SQLAlchemy 中的特定行

    我将 SQLAlchemy 与 python 一起使用 我想更新表中等于此查询的特定行 UPDATE User SET name user WHERE id 3 我通过 sql alchemy 编写了这段代码 但它不起作用 session
  • 如何在Tensorflow中保存估计器以供以后使用?

    我按照教程 TF Layers 指南 构建卷积神经网络 以下是代码 https github com tensorflow tensorflow blob r1 1 tensorflow examples tutorials layers
  • Streamlabs API 405 响应代码

    我正在尝试使用Streamlabs API https dev streamlabs com Streamlabs API 使用 Oauth2 来创建应用程序 因此 首先我将使用我的应用程序的用户发送到一个授权链接 其中包含我的应用程序的客
  • 如何更改matplotlib中双头注释的头大小?

    Below figure shows the plot of which arrow head is very small 我尝试了下面的代码 但它不起作用 它说 引发 AttributeError 未知属性 s k 属性错误 未知属性头宽
  • Java/Python 中的快速 IPC/Socket 通信

    我的应用程序中需要两个进程 Java 和 Python 进行通信 我注意到套接字通信占用了 93 的运行时间 为什么通讯这么慢 我应该寻找套接字通信的替代方案还是可以使其更快 更新 我发现了一个简单的修复方法 由于某些未知原因 缓冲输出流似

随机推荐

  • Haskell:集合上的递归函数

    我是 Haskell 的新手 我正在尝试编写一个 有点 基本的递归函数来生成集合的分区 我正在引用这个维基页面 https en wikipedia org wiki Partition of a set https en wikipedi
  • 使用 gee() 拟合模型时出错:外部函数调用中出现 NA/NaN/Inf (arg 3)

    我正在一个包含 13 500 个观察值 这里是学生 的数据集上拟合一个 gee 模型 学生被分为 52 个不同的学校 我知道有证据表明学生嵌套在学校内 低 ICC 因此我应该在方差协方差矩阵中调整这种嵌套效应 我打算做的是首先安装一个具有可
  • 将 ls 输出转换为 csv

    我将如何转换 find ls gt tmp files txt 这给了我类似的东西 908715 40 rwxrwxr x 1 david staff 16542 Nov 15 14 12 dump info py 908723 0 drw
  • 将两个 PDF 页面合并为新页面,文本内容之间不留空格

    all 我想将两个 PDF 合并为一个 PDF 与此同时 我想无缝地加入这两个 PDF 例如 假设第一个PDF文件的最后一页有很多空白 合并后 我希望第二个PDF从第一个PDF的空白开始 我们有任何工具支持吗 这是一项并不难的任务 假设我们
  • 使用 xmllint 添加属性

    我想向标签添加一个属性 使用xmllint 我可以通过 xmllint 做到这一点吗 Xmllint 不是用来编辑 XML 的 所以我认为答案是 不 你不能 要编辑 XML 您可以使用 XMLStarlet 向现有 XML 文档添加属性的语
  • 无法从视图中的异步方法返回值

    我正在尝试从中返回值asynchtml 帮助器 但它给出以下字符串而不是所需的值 System Threading Tasks Task WhenAllPromise 1 System Decimal Method public async
  • 由于 zend 路线,zend 导航无法工作

    EDIT 该问题是由于 zend 路由引起的 请检查更新 我正在使用 xml 文件进行导航 编辑 以下代码来自layout phtml文件 config new Zend Config Xml APPLICATION PATH config
  • 您可以从 EntityListener 访问 EntityManager 吗?

    我知道 JSR 000220 Enterprise JavaBeans 3 0 Final Release 持久性 规范指出 一般来说 便携式应用程序不应调用 EntityManager 或查询操作 访问其他实体实例 或修改生命周期回调方法
  • 安装 Laravel 时出现错误:“./composer.json 不可写。”

    这是我运行的命令 composer global require laravel installer 这是我之后得到的文本和错误 Changed current directory to home dimitar composer comp
  • 使用 OpenCV 改进图像中的矩形轮廓检测

    我正在尝试检测给定图像中的矩形框 Original image but the image is not good enough to detect rectangles how can i improve it and detect al
  • Python 单元测试输出数据

    如果我用 Python 编写单元测试 使用 unittest 模块 是否可以输出失败测试的数据 以便我可以检查它以帮助推断导致错误的原因 我知道创建自定义消息的能力 它可以携带一些信息 但有时您可能会处理更复杂的数据 这些数据无法轻松表示为
  • 代号 1 个 JavaScript 回调

    我正在尝试在我的应用程序中显示同意页面 该页面应该用 html 编写 因此应用程序需要处理来自浏览器的按钮单击事件 我尝试复制博客中的例子 https www codenameone com blog new async java java
  • 如何将自定义图形适合boost图形库模板?

    我对 C 模板很生疏 而且我正在使用 boost 图形库 一个致命的组合 我在网上搜索过 但找不到任何关于如何采用自定义图形结构并将其足够适合 BGL 增强图形库 的直接说明 以便我可以使用增强图形遍历算法 有熟悉图书馆的人可以帮助我吗 编
  • 我可以更改 Firebug 控制台背景颜色吗?

    我更喜欢 Firebug 窗口具有深色背景颜色和浅色文本 或者甚至只是灰色背景而不是白色就足够了 有什么办法可以做到这一点 无论是通过调整 firebug 的原始文件还是通过使用扩展 这是一个不错的 firebug 深色主题 仅适用于 Fi
  • Visual Studio 错误:已添加具有相同键的项目

    当我尝试更改控件的默认图像时在 Windows 窗体上在表单设计器中 无论在哪个控件上的哪个位置 我收到此错误 错误消息 具有相同的项目 密钥已经添加 我尝试删除并重新创建资源 resx文件 我保证只有 1 个带有这些键的 resx 文件存
  • 在 PHP 8 上安装 apcu_bc 包时遇到问题

    安装包时遇到以下错误pecl install apcu bc在 PHP 8 上 In file included from tmp pear temp apcu bc php apc c 35 usr local include php e
  • 如何从滚动视图中删除子视图?

    我如何从滚动视图中删除所有子视图 我在滚动视图中有一个 uiview 和它上面的一个按钮 像这样 这是我在滚动视图中添加子视图的代码 void AddOneButton NSInteger myButtonTag lastButtonNum
  • java.util.regex.Pattern 可以进行部分匹配吗?

    是否可以知道流 字符串是否包含以下输入 could匹配正则表达式 例如 String input AA Pattern pat Pattern compile AAAAAB Matcher matcher pat matcher input
  • 按名称访问 ResourceDictionary

    假设我的 Application xaml 中有一些 ResourceDictionary 定义如下
  • django-reversion 撤消功能 - 恢复多个对象

    我正在尝试使用 django reversion 在 django 项目中实现 撤消 功能 以防用户意外修改多个对象 使用管理面板不起作用 因为必须一一恢复对象 我的问题是我无法创建包含多个对象数据的修订版本 即使当我这样做时 with r