diff --git a/factory/base.py b/factory/base.py index 923c56ba..9e07899a 100644 --- a/factory/base.py +++ b/factory/base.py @@ -231,7 +231,7 @@ def contribute_to_class(self, factory, self.counter_reference = self._get_counter_reference() - for parent in self.factory.__mro__[1:]: + for parent in reversed(self.factory.__mro__[1:]): if not hasattr(parent, '_meta'): continue self.declarations.update(parent._meta.declarations) diff --git a/tests/test_using.py b/tests/test_using.py index e20f9494..f18df4d6 100644 --- a/tests/test_using.py +++ b/tests/test_using.py @@ -766,6 +766,37 @@ class Meta: test_object_alt = TestObjectFactory.build() self.assertEqual(None, test_object_alt.three) + def test_override_inherited(self): + """Overriding inherited declarations""" + class TestObjectFactory(factory.Factory): + class Meta: + model = TestObject + + one = 'one' + + class TestObjectFactory2(TestObjectFactory): + one = 'two' + + test_object = TestObjectFactory2.build() + self.assertEqual('two', test_object.one) + + def test_override_inherited_deep(self): + """Overriding inherited declarations""" + class TestObjectFactory(factory.Factory): + class Meta: + model = TestObject + + one = 'one' + + class TestObjectFactory2(TestObjectFactory): + one = 'two' + + class TestObjectFactory3(TestObjectFactory2): + pass + + test_object = TestObjectFactory3.build() + self.assertEqual('two', test_object.one) + def test_inheritance_and_sequences(self): """Sequence counters should be kept within an inheritance chain.""" class TestObjectFactory(factory.Factory):