[1.8.x] Fixed #25371 -- Added reverse_sql and reverse_code examples to docs.

Backport of 4283a03843 from master
This commit is contained in:
Bibhas 2015-09-09 15:56:09 +05:30 committed by Tim Graham
parent ce3dd17c2e
commit 72219d7b32
1 changed files with 21 additions and 3 deletions

View File

@ -228,6 +228,14 @@ queries and parameters in the same way as :ref:`cursor.execute()
If you want to include literal percent signs in the query, you have to double If you want to include literal percent signs in the query, you have to double
them if you are passing parameters. them if you are passing parameters.
The ``reverse_sql`` queries are executed when the migration is unapplied, so
you can reverse the changes done in the forwards queries::
migrations.RunSQL(
["INSERT INTO musician (name) VALUES (%s);", ['Reinhardt']],
["DELETE FROM musician where name=%s;", ['Reinhardt']],
)
The ``state_operations`` argument is so you can supply operations that are The ``state_operations`` argument is so you can supply operations that are
equivalent to the SQL in terms of project state; for example, if you are equivalent to the SQL in terms of project state; for example, if you are
manually creating a column, you should pass in a list containing an ``AddField`` manually creating a column, you should pass in a list containing an ``AddField``
@ -274,6 +282,10 @@ match the operation's place in the project history, and the second is an
instance of :class:`SchemaEditor instance of :class:`SchemaEditor
<django.db.backends.base.schema.BaseDatabaseSchemaEditor>`. <django.db.backends.base.schema.BaseDatabaseSchemaEditor>`.
The ``reverse_code`` argument is called when unapplying migrations. This
callable should undo what is done in the ``code`` callable so that the
migration is reversible.
The optional ``hints`` argument will be passed as ``**hints`` to the The optional ``hints`` argument will be passed as ``**hints`` to the
:meth:`allow_migrate` method of database routers to assist them in making a :meth:`allow_migrate` method of database routers to assist them in making a
routing decision. See :ref:`topics-db-multi-db-hints` for more details on routing decision. See :ref:`topics-db-multi-db-hints` for more details on
@ -301,14 +313,20 @@ model::
Country(name="France", code="fr"), Country(name="France", code="fr"),
]) ])
def reverse_func(apps, schema_editor):
# forwards_func() creates two Country instances,
# so reverse_func() should delete them.
Country = apps.get_model("myapp", "Country")
db_alias = schema_editor.connection.alias
Country.objects.using(db_alias).filter(name="USA", code="us").delete()
Country.objects.using(db_alias).filter(name="France", code="fr").delete()
class Migration(migrations.Migration): class Migration(migrations.Migration):
dependencies = [] dependencies = []
operations = [ operations = [
migrations.RunPython( migrations.RunPython(forwards_func, reverse_func),
forwards_func,
),
] ]
This is generally the operation you would use to create This is generally the operation you would use to create