Fixed #32833 -- Fixed ContentTypeManager.get_for_models() crash when using in migrations.

Co-authored-by: Heraldo Lucena <23155511+HMaker@users.noreply.github.com>
This commit is contained in:
Sarah Boyce 2022-10-10 08:57:52 +02:00 committed by GitHub
parent d3579ca112
commit 84206607d6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 13 additions and 1 deletions

View File

@ -89,7 +89,9 @@ class ContentTypeManager(models.Manager):
)
cts = self.filter(condition)
for ct in cts:
opts_models = needed_opts.pop(ct.model_class()._meta, [])
opts_models = needed_opts.pop(
ct._meta.apps.get_model(ct.app_label, ct.model)._meta, []
)
for model in opts_models:
results[model] = ct
self._add_to_cache(self.db, ct)

View File

@ -1,5 +1,7 @@
from django.apps import apps
from django.contrib.contenttypes.models import ContentType, ContentTypeManager
from django.db import models
from django.db.migrations.state import ProjectState
from django.test import TestCase, override_settings
from django.test.utils import isolate_apps
@ -90,6 +92,14 @@ class ContentTypesTests(TestCase):
},
)
def test_get_for_models_migrations(self):
state = ProjectState.from_apps(apps.get_app_config("contenttypes"))
ContentType = state.apps.get_model("contenttypes", "ContentType")
cts = ContentType.objects.get_for_models(ContentType)
self.assertEqual(
cts, {ContentType: ContentType.objects.get_for_model(ContentType)}
)
def test_get_for_models_full_cache(self):
# Full cache
ContentType.objects.get_for_model(ContentType)