mirror of
				https://github.com/django/django.git
				synced 2025-10-31 01:25:32 +00:00 
			
		
		
		
	[3.1.x] Fixed #31742 -- Fixed makemigrations crash on ForeignKey to an app with mixed case label.
Regression in9e1b6b8a66. Thanks Ignacio Santolin for the report. Backport of62d85a2835from master
This commit is contained in:
		| @@ -582,6 +582,10 @@ class ForeignObject(RelatedField): | |||||||
|         if self.remote_field.parent_link: |         if self.remote_field.parent_link: | ||||||
|             kwargs['parent_link'] = self.remote_field.parent_link |             kwargs['parent_link'] = self.remote_field.parent_link | ||||||
|         if isinstance(self.remote_field.model, str): |         if isinstance(self.remote_field.model, str): | ||||||
|  |             if '.' in self.remote_field.model: | ||||||
|  |                 app_label, model_name = self.remote_field.model.split('.') | ||||||
|  |                 kwargs['to'] = '%s.%s' % (app_label, model_name.lower()) | ||||||
|  |             else: | ||||||
|                 kwargs['to'] = self.remote_field.model.lower() |                 kwargs['to'] = self.remote_field.model.lower() | ||||||
|         else: |         else: | ||||||
|             kwargs['to'] = self.remote_field.model._meta.label_lower |             kwargs['to'] = self.remote_field.model._meta.label_lower | ||||||
|   | |||||||
| @@ -867,6 +867,34 @@ class StateTests(SimpleTestCase): | |||||||
|         with self.assertRaisesMessage(ValueError, msg): |         with self.assertRaisesMessage(ValueError, msg): | ||||||
|             project_state.apps |             project_state.apps | ||||||
|  |  | ||||||
|  |     def test_reference_mixed_case_app_label(self): | ||||||
|  |         new_apps = Apps() | ||||||
|  |  | ||||||
|  |         class Author(models.Model): | ||||||
|  |             class Meta: | ||||||
|  |                 app_label = 'MiXedCase_migrations' | ||||||
|  |                 apps = new_apps | ||||||
|  |  | ||||||
|  |         class Book(models.Model): | ||||||
|  |             author = models.ForeignKey(Author, models.CASCADE) | ||||||
|  |  | ||||||
|  |             class Meta: | ||||||
|  |                 app_label = 'MiXedCase_migrations' | ||||||
|  |                 apps = new_apps | ||||||
|  |  | ||||||
|  |         class Magazine(models.Model): | ||||||
|  |             authors = models.ManyToManyField(Author) | ||||||
|  |  | ||||||
|  |             class Meta: | ||||||
|  |                 app_label = 'MiXedCase_migrations' | ||||||
|  |                 apps = new_apps | ||||||
|  |  | ||||||
|  |         project_state = ProjectState() | ||||||
|  |         project_state.add_model(ModelState.from_model(Author)) | ||||||
|  |         project_state.add_model(ModelState.from_model(Book)) | ||||||
|  |         project_state.add_model(ModelState.from_model(Magazine)) | ||||||
|  |         self.assertEqual(len(project_state.apps.get_models()), 3) | ||||||
|  |  | ||||||
|     def test_real_apps(self): |     def test_real_apps(self): | ||||||
|         """ |         """ | ||||||
|         Including real apps can resolve dangling FK errors. |         Including real apps can resolve dangling FK errors. | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user