diff options
| author | Simon Charette <charette.s@gmail.com> | 2014-08-03 15:02:40 -0400 |
|---|---|---|
| committer | Simon Charette <charette.s@gmail.com> | 2014-08-03 15:27:01 -0400 |
| commit | cbb29af1aa1ebe11b38e73a6f34df9cd171d6c5b (patch) | |
| tree | cf295145dbc4f9027d26db2553f9bfff1fbba49e /django | |
| parent | 2d542bf60cc37c59872c5a20d6af3bf826038739 (diff) | |
Fixed #23160 -- Correctly rename models with self referential fields.
Thanks to whitews AT gmail for the report.
Diffstat (limited to 'django')
| -rw-r--r-- | django/db/migrations/operations/models.py | 26 |
1 files changed, 19 insertions, 7 deletions
diff --git a/django/db/migrations/operations/models.py b/django/db/migrations/operations/models.py index 4e8100a5bb..5b1a23eab7 100644 --- a/django/db/migrations/operations/models.py +++ b/django/db/migrations/operations/models.py @@ -124,10 +124,14 @@ class RenameModel(Operation): del state.models[app_label, self.old_name.lower()] # Repoint the FKs and M2Ms pointing to us for related_object in (related_objects + related_m2m_objects): - related_key = ( - related_object.model._meta.app_label, - related_object.model._meta.object_name.lower(), - ) + # Use the new related key for self referential related objects. + if related_object.model == model: + related_key = (app_label, self.new_name.lower()) + else: + related_key = ( + related_object.model._meta.app_label, + related_object.model._meta.object_name.lower(), + ) new_fields = [] for name, field in state.models[related_key].fields: if name == related_object.field.name: @@ -152,12 +156,20 @@ class RenameModel(Operation): related_objects = old_model._meta.get_all_related_objects() related_m2m_objects = old_model._meta.get_all_related_many_to_many_objects() for related_object in (related_objects + related_m2m_objects): + if related_object.model == old_model: + model = new_model + related_key = (app_label, self.new_name.lower()) + else: + model = related_object.model + related_key = ( + related_object.model._meta.app_label, + related_object.model._meta.object_name.lower(), + ) to_field = new_apps.get_model( - related_object.model._meta.app_label, - related_object.model._meta.object_name.lower(), + *related_key )._meta.get_field_by_name(related_object.field.name)[0] schema_editor.alter_field( - related_object.model, + model, related_object.field, to_field, ) |
