Fixed #33480 -- Fixed makemigrations crash when renaming field of renamed model.

Regression in aa4acc164d.
This commit is contained in:
Kirill Safronov 2022-02-01 00:29:49 +05:00 committed by Mariusz Felisiak
parent 71e7c8e737
commit 97a7274468
3 changed files with 24 additions and 1 deletions

View File

@ -824,7 +824,7 @@ class MigrationAutodetector:
for app_label, model_name, field_name in sorted(self.new_field_keys - self.old_field_keys):
old_model_name = self.renamed_models.get((app_label, model_name), model_name)
old_model_state = self.from_state.models[app_label, old_model_name]
new_model_state = self.to_state.models[app_label, old_model_name]
new_model_state = self.to_state.models[app_label, model_name]
field = new_model_state.get_field(field_name)
# Scan to see if this is actually a rename!
field_dec = self.deep_deconstruct(field)

View File

@ -37,3 +37,6 @@ Bugfixes
* Fixed a bug in Django 4.0 that caused a crash of ``QuerySet.aggregate()``
after ``annotate()`` on an aggregate function with a
:ref:`default <aggregate-default>` (:ticket:`33468`).
* Fixed a regression in Django 4.0 that caused a crash of ``makemigrations``
when renaming a field of a renamed model (:ticket:`33480`).

View File

@ -1049,6 +1049,26 @@ class AutodetectorTests(TestCase):
new_name='renamed_foo',
)
def test_rename_field_with_renamed_model(self):
changes = self.get_changes(
[self.author_name],
[
ModelState('testapp', 'RenamedAuthor', [
('id', models.AutoField(primary_key=True)),
('renamed_name', models.CharField(max_length=200)),
]),
],
MigrationQuestioner({'ask_rename_model': True, 'ask_rename': True}),
)
self.assertNumberMigrations(changes, 'testapp', 1)
self.assertOperationTypes(changes, 'testapp', 0, ['RenameModel', 'RenameField'])
self.assertOperationAttributes(
changes, 'testapp', 0, 0, old_name='Author', new_name='RenamedAuthor',
)
self.assertOperationAttributes(
changes, 'testapp', 0, 1, old_name='name', new_name='renamed_name',
)
def test_rename_model(self):
"""Tests autodetection of renamed models."""
changes = self.get_changes(