Django Django reversion不会保存在shell中所做的修改

Django Django reversion不会保存在shell中所做的修改

在本文中,我们将介绍在使用Django reversion时,如何在shell中进行修改但无法保存版本的问题。

阅读更多:Django 教程

Django reversion简介

Django reversion是一个强大的库,它可以对Django模型的更改进行版本控制,从而实现数据的历史记录。它可以追踪每个对象的修改并保存版本,以便可以恢复到以前的状态。但是,在shell中使用Django reversion时,我们可能会遇到一个问题:无法保存在shell中所做的修改到版本。

Django reversion在shell中的使用

通常,我们可以在Django的shell中执行一些数据库操作,例如创建、修改或删除对象。然而,在这些操作中,默认情况下Django reversion不会保存这些操作的版本。这意味着,无论我们在shell中如何修改数据库,都无法通过Django reversion来记录这些修改。

让我们来看一个简单的示例。假设我们有一个名为”Book”的模型,其中包含书籍的名称和作者:

from django.db import models
from reversion import register

class Book(models.Model):
    name = models.CharField(max_length=100)
    author = models.CharField(max_length=100)

register(Book)
Python

现在,我们在shell中创建一个新的书籍对象,并修改其作者名称:

>>> from myapp.models import Book
>>> book = Book.objects.create(name="Python Web Development", author="John Smith")
>>> book.author = "Jane Doe"
>>> book.save()
Python

然而,如果我们尝试使用Django reversion来查看该书籍的历史版本,我们会发现无法找到任何版本记录:

>>> from reversion.models import Version

>>> Version.objects.get_for_object(book)
Version.DoesNotExist: Version matching query does not exist.
Python

解决方案:手动创建版本

要在shell中使用Django reversion保存修改,我们需要手动创建版本。在我们对对象进行修改后,我们可以调用reversion.create_revision()来创建一个新的版本:

>>> import reversion

>>> with reversion.create_revision():
>>>     book.author = "Jane Doe"
>>>     book.save()
Python

现在,如果我们再次尝试查找该书籍的版本记录,我们将能够找到它:

>>> Version.objects.get_for_object(book)
<Version: Book object>

>>> version = Version.objects.get_for_object(book)
>>> version.revision
<Revision: Revision object>

>>> version.revision.date_created
datetime.datetime(2022, 10, 1, 10, 0, 0)
Python

通过手动创建版本,我们成功地保存了我们在shell中所做的修改,并且我们可以找到对应的版本记录。

总结

在本文中,我们介绍了在使用Django reversion时在shell中无法保存版本的问题,并提供了解决方案。通过手动创建版本,我们可以成功地记录并保存在shell中所做的修改。使用Django reversion,我们可以更好地追踪数据的历史记录,并轻松地回溯到以前的状态,以满足应用程序的需求。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

登录

注册