2017-05-23 70 views
1

後恢復對象我有這樣的模式:Django的逆轉失敗遷移

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數據庫。

有沒有辦法來防止這種情況?

回答

0

GH issue

啊,我明白了。煩人。看起來版本可以處理刪除 一個字段,但不能添加一個。

自動化,這是幾乎不可能的。有修訂 數據庫在那裏與舊版本的gigbytes,當一個新的遷移時可以採取每遷移運行 天更新舊 修訂數據。這不是真的可行。

我的一般做法是遷移後刪除修改數據。 如果你真的想保留它,那麼你可以在應用程序中編寫自己的數據 遷移。

- 該項目的作者。

如此看來,遷移後恢復僅僅是不支持,雖然它有時它的工作並不意味着使用這種方式。