【发布时间】:2016-11-04 08:57:47
【问题描述】:
对于我的 Django 应用程序,我希望保留所有对象的完整编辑历史记录。作为其中的一部分,我重写了模型的 save() 方法,其中一部分如下所示:
# Replicate the current version (from the db) with all attributes unchanged
new_ver = self.__class__.objects.get(pk=self.pk).save(force_insert=True)
# Update the current version in the database with the new attributes
super(CodexBaseClass, self).save(*args, force_update=True, **kwargs)
传递给 save() 方法的“self”是表单生成的对象的新版本。这段代码试图做的是
(1) 复制当前出现在数据库中的对象(即:复制表单修改之前的数据),然后强制插入此数据,以便将其复制为新行
(2) 使用通过表单提交的对象的新版本更新现有行。
问题出在这两行代码的第一行 - 它生成了一个 DoesNotExist 异常。该对象确实存在,因此我目前认为问题在于它尝试读取的数据库行当前已锁定。
所以我的问题是:有没有一种方法可以修改/替换第一行,以便我拥有 initial 数据的副本,就像在表单修改之前一样?
谢谢。
【问题讨论】:
标签: python django django-models