根據django官方文檔建議,開發過程當中會把生成的migrations提交到git中。因爲各類緣由,會有一些場景須要重置migrations,故總結一些經常使用場景及解決辦法。python
不考慮數據庫數據,能夠徹底清空數據庫。mysql
步驟:git
刪除全部migrationssql
find . -path "*/migrations/*.py" -not -name "__init__.py" -delete find . -path "*/migrations/*.pyc" -delete
從新生成migrationsshell
python manage.py makemigrations python manage.py migrate
有時候咱們會直接導入完整的數據庫,包括數據,這種狀況下就不能簡單的清空數據庫。
這時咱們的目的就是:清空數據庫的migration history,保證之後的migrate能正常使用,但要保留其餘數據。數據庫
步驟:django
從數據庫中刪除全部非0001_initial
的migration historyapp
DELETE FROM django_migrations WHERE app IN ('your','app','labels') AND name != '0001_initial'
使用migrate命令回滾0001_initial
的migration historycode
python manage.py migrate --fake your zero python manage.py migrate --fake app zero python manage.py migrate --fake labels zero
從新生成0001_initial
,若是能保證已有0001_initial
已經是最新的,可跳過此步開發
find . -path "*/migrations/*.py" -not -name "__init__.py" -delete find . -path "*/migrations/*.pyc" -delete python manage.py makemigrations
在數據庫中生成新的0001_initial
記錄
python migrate --fake-initial