2015-09-12 29 views
1

我有一個模型與相關字段設置。我運行了manage.py migrate,然後在我的數據庫中創建了一個表。然後我運行manage.py makemigrations,以便它可以創建一個前綴爲「0001」的初始遷移文件。我在我的模型中添加了另一個字段,然後再次運行manage.py makemigrations,這創建了另一個帶有前綴'0002'的遷移文件。當我現在運行manage.py migrate時,它仍會查看第一個遷移文件,並因此拋出「表已存在」的錯誤。我怎樣才能讓它只查看最新的遷移文件,以便將新列添加到表中?我正在使用MySQL。Django - Migrate命令表示在執行第二次makemigrations後存在表格

回答

2

這絕不會發生,除非Django檢測到(認爲)數據庫尚未設置,並嘗試用模式初始化表。

看起來你的桌子已經安裝好了,但這是django所不知道的。這就是爲什麼它會嘗試開始應用第一次遷移 - 表中的創建和模式都包含在內。

您可以使用--fake--fake-initial選項按您的具體問題,這告訴Django該表已經建立和準備好,並的遷移。

更多信息有用的鏈接:

django migrations - django documentation

django migrations, a primer - realpython

how to redo a migration after fake - stackoverflow

+0

kicker86嗨。我決定從新鮮開始,以確認我所經歷的。我放棄了數據庫並創建了一個新的數據庫;然後我刪除了我的應用程序文件夾中的遷移文件夾中的所有文件。然後我運行'manage.py migrate',按照預期工作,然後運行'manage.py makemigrations'。現在它告訴我:'沒有檢測到變化。我之前遇到過這個問題,所以我通常做的是'manage.py makemigrations '。它不是很奇怪,它只適用於我指定app_name時? – Vinu

+0

'makemigrations'創建遷移,'migrate'應用這些遷移。所以當你創建一個空的數據庫並刪除所有的遷移文件時,你應該首先運行'makemigrations'來創建遷移文件,然後用'migrate'應用這些文件。在沒有任何遷移文件的情況下在空數據庫上運行'migrate'將除了安裝django(以及其他應用程序,如果使用的話)基表以外不會執行任何操作。沒有遷移文件,您的模型不會被轉換成表格。 – kicker86

+0

看看他的答案,爲什麼你需要使用應用程序名稱而不是通用的'make migrations'語句創建遷移:http://stackoverflow.com/questions/24912173/django-1-7-makemigrations-not-detecting-changes – kicker86

相關問題