2017-08-15 42 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. 從初始段塞字段遷移中刪除默認值