def test_remove_field(self):
project_state = self.set_up_test_model()
operation = migrations.RemoveField('Pony', 'pink')
new_state = project_state.clone()
operation.state_forwards('tests', new_state)
self.assertColumnExists('tests_pony', 'pink')
with connection.schema_editor() as editor:
operation.database_forwards('tests', editor, project_state, new_state)
self.assertColumnNotExists('tests_pony', 'pink')
with connection.schema_editor() as editor:
operation.database_backwards('tests', editor, new_state, project_state)
self.assertColumnExists('tests_pony', 'pink')
python类RemoveField()的实例源码
def test_remove_foreign_key_field(self):
project_state = self.set_up_test_model()
operation = migrations.RemoveField('Rider', 'pony')
new_state = project_state.clone()
operation.state_forwards('tests', new_state)
self.assertColumnExists('tests_rider', 'pony_id')
with connection.schema_editor() as editor:
operation.database_forwards('tests', editor, project_state, new_state)
self.assertColumnNotExists('tests_rider', 'pony_id')
with connection.schema_editor() as editor:
operation.database_backwards('tests', editor, new_state, project_state)
self.assertColumnExists('tests_rider', 'pony_id')
def remove_field(field, filters: List[str]):
"""Removes the specified field from a model.
Arguments:
field:
The field to remove from a model.
filters:
List of strings to filter
SQL statements on.
"""
model = define_fake_model({'title': field})
project = migrations.state.ProjectState.from_apps(apps)
with connection.schema_editor() as schema_editor:
execute_migration(schema_editor, [
migrations.CreateModel(
model.__name__,
fields=[
('title', field.clone())
]
)
], project)
with filtered_schema_editor(*filters) as (schema_editor, calls):
execute_migration(schema_editor, [
migrations.RemoveField(
model.__name__,
'title'
)
], project)
yield calls