Fixed #33563 -- Fixed contenttype reverse data migration crash with a multiple databases setup.
This commit is contained in:
parent
c121e32082
commit
58d357fc65
|
@ -2,8 +2,9 @@ from django.db import migrations, models
|
|||
|
||||
|
||||
def add_legacy_name(apps, schema_editor):
|
||||
alias = schema_editor.connection.alias
|
||||
ContentType = apps.get_model("contenttypes", "ContentType")
|
||||
for ct in ContentType.objects.all():
|
||||
for ct in ContentType.objects.using(alias):
|
||||
try:
|
||||
ct.name = apps.get_model(ct.app_label, ct.model)._meta.object_name
|
||||
except LookupError:
|
||||
|
|
|
@ -0,0 +1,31 @@
|
|||
from importlib import import_module
|
||||
|
||||
from django.apps import apps
|
||||
from django.contrib.auth.models import Permission
|
||||
from django.contrib.contenttypes.models import ContentType
|
||||
from django.db import DEFAULT_DB_ALIAS, connections
|
||||
from django.test import TransactionTestCase
|
||||
|
||||
remove_content_type_name = import_module(
|
||||
"django.contrib.contenttypes.migrations.0002_remove_content_type_name"
|
||||
)
|
||||
|
||||
|
||||
class MultiDBRemoveContentTypeNameTests(TransactionTestCase):
|
||||
databases = {"default", "other"}
|
||||
available_apps = ["django.contrib.auth", "django.contrib.contenttypes"]
|
||||
|
||||
def test_add_legacy_name_other_database(self):
|
||||
# add_legacy_name() should update ContentType objects in the specified
|
||||
# database. Remove ContentTypes from the default database to distinct
|
||||
# from which database they are fetched.
|
||||
Permission.objects.all().delete()
|
||||
ContentType.objects.all().delete()
|
||||
# ContentType.name in the current version is a property and cannot be
|
||||
# set, so an AttributeError is raised with the other database.
|
||||
with self.assertRaises(AttributeError):
|
||||
with connections["other"].schema_editor() as editor:
|
||||
remove_content_type_name.add_legacy_name(apps, editor)
|
||||
# ContentType were removed from the default database.
|
||||
with connections[DEFAULT_DB_ALIAS].schema_editor() as editor:
|
||||
remove_content_type_name.add_legacy_name(apps, editor)
|
Loading…
Reference in New Issue