mirror of
				https://github.com/django/django.git
				synced 2025-10-31 09:41:08 +00:00 
			
		
		
		
	Fixed TypeError when rendering ModelState with multiple bases.
This commit is contained in:
		| @@ -176,7 +176,7 @@ class ModelState(object): | ||||
|             for base in self.bases | ||||
|         ) | ||||
|         if None in bases: | ||||
|             raise InvalidBasesError("Cannot resolve one or more bases from %r" % self.bases) | ||||
|             raise InvalidBasesError("Cannot resolve one or more bases from %r" % (self.bases,)) | ||||
|         # Turn fields into a dict for the body, add other bits | ||||
|         body = dict(self.fields) | ||||
|         body['Meta'] = meta | ||||
|   | ||||
| @@ -94,32 +94,58 @@ class StateTests(TestCase): | ||||
|         self.assertEqual(new_app_cache.get_model("migrations", "Tag")._meta.get_field_by_name("name")[0].max_length, 100) | ||||
|         self.assertEqual(new_app_cache.get_model("migrations", "Tag")._meta.get_field_by_name("hidden")[0].null, False) | ||||
|  | ||||
|     def test_render_multiple_inheritance(self): | ||||
|         # Use a custom app cache to avoid polluting the global one. | ||||
|         new_app_cache = BaseAppCache() | ||||
|  | ||||
|     def test_render_model_inheritance(self): | ||||
|         class Book(models.Model): | ||||
|             title = models.CharField(max_length=1000) | ||||
|  | ||||
|             class Meta: | ||||
|                 app_label = "migrations" | ||||
|                 app_cache = new_app_cache | ||||
|                 app_cache = BaseAppCache() | ||||
|  | ||||
|         class Novel(Book): | ||||
|             class Meta: | ||||
|                 app_label = "migrations" | ||||
|                 app_cache = new_app_cache | ||||
|                 app_cache = BaseAppCache() | ||||
|  | ||||
|         # First, test rendering individually | ||||
|         yet_another_app_cache = BaseAppCache() | ||||
|         app_cache = BaseAppCache() | ||||
|  | ||||
|         # We shouldn't be able to render yet | ||||
|         with self.assertRaises(ValueError): | ||||
|             ModelState.from_model(Novel).render(yet_another_app_cache) | ||||
|         ms = ModelState.from_model(Novel) | ||||
|         with self.assertRaises(InvalidBasesError): | ||||
|             ms.render(app_cache) | ||||
|  | ||||
|         # Once the parent model is in the app cache, it should be fine | ||||
|         ModelState.from_model(Book).render(yet_another_app_cache) | ||||
|         ModelState.from_model(Novel).render(yet_another_app_cache) | ||||
|         ModelState.from_model(Book).render(app_cache) | ||||
|         ModelState.from_model(Novel).render(app_cache) | ||||
|  | ||||
|     def test_render_model_with_multiple_inheritance(self): | ||||
|         class Foo(models.Model): | ||||
|             class Meta: | ||||
|                 app_label = "migrations" | ||||
|                 app_cache = BaseAppCache() | ||||
|  | ||||
|         class Bar(models.Model): | ||||
|             class Meta: | ||||
|                 app_label = "migrations" | ||||
|                 app_cache = BaseAppCache() | ||||
|  | ||||
|         class FooBar(Foo, Bar): | ||||
|             class Meta: | ||||
|                 app_label = "migrations" | ||||
|                 app_cache = BaseAppCache() | ||||
|  | ||||
|         app_cache = BaseAppCache() | ||||
|  | ||||
|         # We shouldn't be able to render yet | ||||
|         ms = ModelState.from_model(FooBar) | ||||
|         with self.assertRaises(InvalidBasesError): | ||||
|             ms.render(app_cache) | ||||
|  | ||||
|         # Once the parent models are in the app cache, it should be fine | ||||
|         ModelState.from_model(Foo).render(app_cache) | ||||
|         ModelState.from_model(Bar).render(app_cache) | ||||
|         ModelState.from_model(FooBar).render(app_cache) | ||||
|  | ||||
|     def test_render_project_dependencies(self): | ||||
|         """ | ||||
|   | ||||
		Reference in New Issue
	
	Block a user