Sunday, December 21, 2014

Re: How to make a migration irreversible [1.7]

Hey Bibhas,

thank you for the report. I can verify that behavior and would classify it as a release blocker since it leads to potential data loss. Can you open a ticket on https://code.djangoproject.com/ please.

In general a migration is a collection of operations. The migration will only be unapplied if all operations are reversible. There is no direct way to prevent a migration (file) to be unapplied. I'm not sure if it's worth to add a property / attribute to the migration class to centralize that check. You could open a ticket as well.

As a workaround you can add "migrations.RunPython(lambda apps, schema_editor: None)" as first operation in the operations list for that migration. It is a noop in forwards migrations and not reversible. But in adding a RunPython operation you will lose the ability to squash migrations.

/Markus

On Sunday, December 21, 2014 1:32:29 PM UTC+1, Bibhas wrote:
Hi,

I need to make a migration irreversible. And strangely I don't see any way to do it in the migration doc. I see that the Operation class has a property called `reversible`, but don't see any way to set it to False.

I had a legacy model that was generated with inspectdb, hence it had managed=False. But now when I Need to make changes to it I removed the managed flag and the migration is trying to delete the table and create it again. I removed the droptable operation and faked the migration to avoid the error. But if I revert the migration, that table is going to be dropped anyway, right? Because it's the revert operation of CreateTable. How do I stop the backward migration for this particular migration? There is nothing much important before it, so it's not a trouble if it's irreversible.

Am I missing something really obvious?

Thanks,
Bibhas

--
You received this message because you are subscribed to the Google Groups "Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to django-users+unsubscribe@googlegroups.com.
To post to this group, send email to django-users@googlegroups.com.
Visit this group at http://groups.google.com/group/django-users.
To view this discussion on the web visit https://groups.google.com/d/msgid/django-users/6cbcca9e-d60d-419d-874c-e5d234e7c6a2%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

No comments:

Post a Comment