summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Godwin <andrew@aeracode.org>2013-12-06 05:48:21 -0800
committerAndrew Godwin <andrew@aeracode.org>2013-12-06 05:48:21 -0800
commita06fd092ef3cdfb3d5327a95bd946a483a98a3de (patch)
tree5293d0d007cd0b8b4510fd4e3b0c25495e139f47
parent9a73e7f40c851cef262dd36da444c81492632ee5 (diff)
parentaba75b0d71808ed9ebc625e31a47da158f25b29d (diff)
Merge pull request #2037 from bmispelon/invalidbaseserror
Fixed TypeError when rendering ModelState with multiple bases.
-rw-r--r--django/db/migrations/state.py2
-rw-r--r--tests/migrations/test_state.py48
2 files changed, 38 insertions, 12 deletions
diff --git a/django/db/migrations/state.py b/django/db/migrations/state.py
index 0dd8d85e10..53c24cb8da 100644
--- a/django/db/migrations/state.py
+++ b/django/db/migrations/state.py
@@ -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
diff --git a/tests/migrations/test_state.py b/tests/migrations/test_state.py
index fe2092dad1..889367b41d 100644
--- a/tests/migrations/test_state.py
+++ b/tests/migrations/test_state.py
@@ -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):
"""