【问题标题】:Django reversion fails to recover object after migrationDjango reversion 迁移后无法恢复对象
【发布时间】:2017-05-23 00:48:46
【问题描述】:

我有这个模型:

from django.contrib.auth.models import User
from django.db import models
import reversion


@reversion.register()
class BlogPost(models.Model):
    author = models.ForeignKey(User)
    title = models.CharField(max_length=32)
    content = models.TextField()

现在我决定将此字段添加到模型中:

random_field = models.PositiveIntegerField(null=False, blank=False)

我创建了迁移并选择了默认值:

operations = [
    migrations.AddField(
        model_name='blogpost',
        name='random_field',
        field=models.PositiveIntegerField(default=10),
        preserve_default=False,
    ),
]

然后迁移它。

现在,我正在使用支持还原的 Django 管理员,在迁移之前我修改了几次博客文章,现在我想迁移到没有随机字段的版本。它说:

Could not save BlogPost object version - missing dependency.

有没有办法防止这种情况发生?我认为这是因为迁移没有创建修订。 似乎错误在这里的某个地方: reversion/models.py#L21

我正在使用

Django==1.11.1
django-reversion==2.0.8

使用 sqlite 数据库。

有没有办法防止这种情况发生?

【问题讨论】:

    标签: django django-reversion


    【解决方案1】:

    根据GH issue:

    啊,我明白了。恼人的。看来修订可以处理删除 一个字段,但不添加一个。

    自动化这几乎是不可能的。有改版 数据库中有千兆字节的旧版本,并更新旧版本 发生新迁移时的修订数据可能需要数天的运行时间 每次迁移。实在不行。

    我的一般方法是在迁移后删除修订数据。 如果你真的想保留它,那么你可以写你自己的数据 在应用程序中迁移。

    -- 项目的作者。

    因此,似乎根本不支持迁移后恢复,虽然它有时可能会起作用,但它并不意味着以这种方式使用。

    【讨论】:

      猜你喜欢
      • 2013-03-12
      • 1970-01-01
      • 2015-05-06
      • 1970-01-01
      • 2021-06-27
      • 2011-09-26
      • 2018-02-22
      • 2023-03-14
      • 1970-01-01
      相关资源
      最近更新 更多