In the initial stages of my project I'm making a lot of changes to the models and thus I've ended up with a lot of south migrations being generated for my apps. Is it possible to consolidate them in any way before going to my production server to perform the migrations so I don't have like a million migrations for each app? And if so, how would I go about doing that?
可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
回答1:
You could always delete the existing migrations and create a new "initial" migration.
To do this, you will need to:
- Remove the migration files for you app (remove the folder altogether)
- Run
./manage.py convert_to_south myapp
This will leave you with a single migration corresponding to your app's state current state.
Alternatively, you can always pack your latest migrations together:
- Remove the migration files that you want to merge (only if they are the latest onces)
- Run
./manage.py schemamigration myapp
This will create a new migration that will correspond to the migrations you removed.
Both of these will likely mess up your development DB.
回答2:
Since this is a development environment, this is how I do it (using SQLite, see below for other SQL servers):
- Do all the changes, let the migration files pile up. No committing migration files to VCS
- When done, delete all the new migration files
- Rename database
- Run manage.py migrate. This will create database structure as it was before you made any changes to it.
- Run manage.py makemigrations. This will create the necessary migrations that reflect your current state
- Move back the original database which already has the final structure & data
- Commit migrations files
When using "proper" SQL servers, just keep two databases: production and development. Change project settings to point to production database instead of renaming in step 3. Also, you can skip step 4.