[4.0.x] Fixed #33234 -- Fixed autodetector crash for proxy models inheriting from non-model class.

Regression in aa4acc164d.

Thanks Kevin Marsh for the report.
Backport of dab48b7482 from main
This commit is contained in:
Mariusz Felisiak 2021-11-02 15:34:08 +01:00
parent b4ad6e32ca
commit e2fe0429ab
2 changed files with 25 additions and 0 deletions

View File

@ -476,6 +476,8 @@ class ProjectState:
def _find_concrete_model_from_proxy(self, proxy_models, model_state):
for base in model_state.bases:
if not (isinstance(base, str) or issubclass(base, models.Model)):
continue
base_key = make_model_tuple(base)
base_state = proxy_models.get(base_key)
if not base_state:

View File

@ -1779,6 +1779,29 @@ class AutodetectorTests(TestCase):
self.assertOperationAttributes(changes, "testapp", 0, 0, name="AuthorProxy")
self.assertOperationAttributes(changes, "testapp", 0, 1, name="AuthorProxy", options={})
def test_proxy_non_model_parent(self):
class Mixin:
pass
author_proxy_non_model_parent = ModelState(
'testapp',
'AuthorProxy',
[],
{'proxy': True},
(Mixin, 'testapp.author'),
)
changes = self.get_changes(
[self.author_empty],
[self.author_empty, author_proxy_non_model_parent],
)
self.assertNumberMigrations(changes, 'testapp', 1)
self.assertOperationTypes(changes, 'testapp', 0, ['CreateModel'])
self.assertOperationAttributes(
changes, 'testapp', 0, 0, name='AuthorProxy',
options={'proxy': True, 'indexes': [], 'constraints': []},
bases=(Mixin, 'testapp.author'),
)
def test_proxy_custom_pk(self):
"""
#23415 - The autodetector must correctly deal with custom FK on proxy