Fixed #23090: Document and enforce not double-squashing migrations

This commit is contained in:
Andrew Godwin 2014-07-29 10:02:59 -07:00
parent a338e07735
commit 8ebd6d35d7
2 changed files with 19 additions and 0 deletions

View File

@ -65,6 +65,8 @@ class Command(BaseCommand):
# Load the operations from all those migrations and concat together
operations = []
for smigration in migrations_to_squash:
if smigration.replaces:
raise CommandError("You cannot squash squashed migrations! Please transition it to a normal migration first: https://docs.djangoproject.com/en/1.7/topics/migrations/#squashing-migrations")
operations.extend(smigration.operations)
if self.verbosity > 0:

View File

@ -487,6 +487,23 @@ please `file a bug report <https://code.djangoproject.com/newticket>`_ either
way detailing the models and their relationships so we can improve the
optimizer to handle your case.
Once you've squashed your migration, you should then commit it alongside the
migrations it replaces and distribute this change to all running instances
of your application, making sure that they run ``migrate`` to store the change
in their database.
After this has been done, you must then transition the squashed migration to
a normal initial migration, by:
- Deleting all the migration files it replaces
- Removing the ``replaces`` argument in the ``Migration`` class of the
squashed migration (this is how Django tells that it is a squashed migration)
.. note::
Once you've squashed a migration, you should not then re-squash that squashed
migration until you have fully transitioned it to a normal migration.
.. _migration-serializing:
Serializing values