2017-08-15 43 views
0

我有与我删除一个非空领域的典范:还原迁移上删除NOT NULL字段

class Spam(models.Model): 
    slug = models.SlugField(allow_unicode=True) # deleted 

后,我所做的迁移和应用他们,我想他们恢复。 但很明显,这导致

django.db.utils.IntegrityError: NOT NULL constraint failed: eggs_spam.slug 

我怎样才能恢复迁移?

回答

1

这很棘手。我能想到的唯一的解决办法是:

1:首先,创建一个迁移,允许塞场可为空

2:然后,创建另一个迁移将填充场的每一行

3:最后,创建一个使字段不可为空的迁移。

希望它可以帮助

+0

一旦slu has已经被删除,我怎么能这样做,我不能恢复它? – Joren

+0

@Joren,正如我所说:你应该加回来,但首先是可以空的。然后,创建一个数据迁移,用一些值填充每一行。然后,创建一个非空约束。 –

+0

啊,是的,我明白,这工作。太糟糕了,我现在有4个额外的迁移,因为在开发过程中犯了一个错误 – Joren

0

还有一个更简单的方法:

  1. 查找迁移,你必须首先添加废料场
  2. 添加默认值一决高下场
  3. 取消应用最后迁移
  4. 从初始段塞字段迁移中删除默认值