diff --git a/tests/model_inheritance/test_abstract_inheritance.py b/tests/model_inheritance/test_abstract_inheritance.py index 8caa5153fa..27b390d9f6 100644 --- a/tests/model_inheritance/test_abstract_inheritance.py +++ b/tests/model_inheritance/test_abstract_inheritance.py @@ -59,6 +59,36 @@ class AbstractInheritanceTests(SimpleTestCase): ), ]) + def test_target_field_may_be_pushed_down(self): + """ + Where the Child model needs to inherit a field from a different base + than that given by depth-first resolution, the target field can be + **pushed down** by being re-declared. + """ + + class Root(models.Model): + name = models.CharField(max_length=255) + + class Meta: + abstract = True + + class ParentA(Root): + class Meta: + abstract = True + + class ParentB(Root): + name = models.IntegerField() + + class Meta: + abstract = True + + class Child(ParentA, ParentB): + name = models.IntegerField() + + self.assertEqual(Child.check(), []) + inherited_field = Child._meta.get_field('name') + self.assertTrue(isinstance(inherited_field, models.IntegerField)) + def test_multiple_inheritance_cannot_shadow_concrete_inherited_field(self): class ConcreteParent(models.Model): name = models.CharField(max_length=255)