1
0
mirror of https://github.com/django/django.git synced 2024-12-23 01:25:58 +00:00

Added tests/patch for AlterField when migrating an unmanaged model relating to ticket-35813.

Included unmanaged_keys to _prepare_field_lists logic for ticket-35813.

Updated code formatting for ticket-35813.
This commit is contained in:
Hanny 2024-10-04 12:43:56 -05:00
parent c334c1a8ff
commit ee280879be
2 changed files with 35 additions and 3 deletions

View File

@ -239,14 +239,14 @@ class MigrationAutodetector:
self.through_users = {}
self.old_field_keys = {
(app_label, model_name, field_name)
for app_label, model_name in self.kept_model_keys
for app_label, model_name in self.kept_model_keys | self.kept_unmanaged_keys
for field_name in self.from_state.models[
app_label, self.renamed_models.get((app_label, model_name), model_name)
].fields
}
self.new_field_keys = {
(app_label, model_name, field_name)
for app_label, model_name in self.kept_model_keys
for app_label, model_name in self.kept_model_keys | self.kept_unmanaged_keys
for field_name in self.to_state.models[app_label, model_name].fields
}

View File

@ -712,6 +712,26 @@ class AutodetectorTests(BaseAutodetectorTests):
author_unmanaged = ModelState(
"testapp", "AuthorUnmanaged", [], {"managed": False}, ("testapp.author",)
)
author_unmanaged_name_default = ModelState(
"testapp",
"Author",
[
("id", models.AutoField(primary_key=True)),
("name", models.CharField(max_length=200, default="Ada Lovelace")),
],
{"managed": False},
("testapp.author",),
)
author_unmanaged_name_longer = ModelState(
"testapp",
"Author",
[
("id", models.AutoField(primary_key=True)),
("name", models.CharField(max_length=400)),
],
{"managed": False},
("testapp.author",),
)
author_unmanaged_managed = ModelState(
"testapp", "AuthorUnmanaged", [], {}, ("testapp.author",)
)
@ -3520,7 +3540,7 @@ class AutodetectorTests(BaseAutodetectorTests):
self.assertEqual(fk_field.remote_field.model, "testapp.AAuthorProxyProxy")
def test_unmanaged_create(self):
"""The autodetector correctly deals with managed models."""
"""The autodetector correctly deals with unmanaged models."""
# First, we test adding an unmanaged model
changes = self.get_changes(
[self.author_empty], [self.author_empty, self.author_unmanaged]
@ -3532,6 +3552,18 @@ class AutodetectorTests(BaseAutodetectorTests):
changes, "testapp", 0, 0, name="AuthorUnmanaged", options={"managed": False}
)
def test_unmanaged_alter_field(self):
"""Tests autodetection of new fields on an unmanaged model."""
changes = self.get_changes(
[self.author_unmanaged_name_default], [self.author_unmanaged_name_longer]
)
# Right number/type of migrations?
self.assertNumberMigrations(changes, "testapp", 1)
self.assertOperationTypes(changes, "testapp", 0, ["AlterField"])
self.assertOperationAttributes(
changes, "testapp", 0, 0, name="name", preserve_default=True
)
def test_unmanaged_delete(self):
changes = self.get_changes(
[self.author_empty, self.author_unmanaged], [self.author_empty]