Fixed #25371 -- Added reverse_sql and reverse_code examples to docs.
This commit is contained in:
parent
dae81c6ec6
commit
4283a03843
|
@ -224,6 +224,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``
|
||||||
|
@ -265,6 +273,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
|
||||||
|
@ -294,14 +306,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
|
||||||
|
|
Loading…
Reference in New Issue