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) cts = self.filter(condition)
for ct in cts: 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: for model in opts_models:
results[model] = ct results[model] = ct
self._add_to_cache(self.db, 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.contrib.contenttypes.models import ContentType, ContentTypeManager
from django.db import models from django.db import models
from django.db.migrations.state import ProjectState
from django.test import TestCase, override_settings from django.test import TestCase, override_settings
from django.test.utils import isolate_apps 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): def test_get_for_models_full_cache(self):
# Full cache # Full cache
ContentType.objects.get_for_model(ContentType) ContentType.objects.get_for_model(ContentType)