2016-02-16 57 views
1

從現有數據庫開始,我想更新它的模式。我改變了我的一個模型,然後運行Django遷移不會更新我的數據庫

python manage.py makemigrations myapp 

它創建遷移,正確定義新的表和列。輸出示例:

Migrations for 'myapp': 
    0001_initial.py: 
    - Create model Foo 
    - Add field Bar 
    - ... 

然後我申請遷移:

python manage.py migrate --database mydb 

我得到這樣的輸出:

Operations to perform: 
    Apply all migrations: admin, myapp, contenttypes, sessions, auth 
Running migrations: 
    Rendering model states... DONE 
    Applying admin.0002_logentry_remove_auto_add... OK 
    Applying auth.0007_alter_validators_add_error_messages... OK 

這似乎已經奏效。 Git告訴我,對應於「mydb」的sqlite文件已經改變。然而,它並沒有將我的新表和列放在裏面,它只是刪除了內容,留下的空表與舊的模式一起。

我在做什麼錯?

+0

嘗試:'python manage.py migrate myapp' –

+0

默認情況下,它會嘗試應用每種可能的遷移(在我的情況中只有一種)。 – JulienD

回答

2

如果你有沒有應用,你應該沒有任何變化創造initial migrations遷移舊的數據庫:

python manage.py makemigrations myapp 

然後運行「假」遷移

python manage.py migrate --database mydb --fake-initial 

在此之後,你可以使用正常的遷移。

+0

我按照你的建議做了'--fake-initial',並得到了與上面相同的輸出。之後,'python manage.py migrate [myapp] --database mydb'告訴我:「沒有適用的遷移」。而我的表格在舊模式下是空的。 – JulienD

+0

您是否從'0001_initial.py'中刪除了所有'Alter field'和'add field'命令? – ilse2005

+0

不,我應該嗎?實際上,使用 - 初始表格不再是空的。我不知道Git檢測到了什麼變化。 – JulienD