From 80eaa0c8711f2c3ca82eb7953db49c7c61bd9ffa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rapha=C3=ABl=20Barrois?= Date: Sun, 18 May 2014 12:16:51 +0200 Subject: factory.django: Fix counter inheritance with abstract models. --- factory/django.py | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) (limited to 'factory/django.py') diff --git a/factory/django.py b/factory/django.py index 9a4e07a..77afd8c 100644 --- a/factory/django.py +++ b/factory/django.py @@ -58,6 +58,18 @@ class DjangoOptions(base.FactoryOptions): base.OptionDefault('django_get_or_create', (), inherit=True), ] + def _get_counter_reference(self): + counter_reference = super(DjangoOptions, self)._get_counter_reference() + if (counter_reference == self.base_factory + and self.base_factory._meta.target is not None + and self.base_factory._meta.target._meta.abstract + and self.target is not None + and not self.target._meta.abstract): + # Target factory is for an abstract model, yet we're for another, + # concrete subclass => don't reuse the counter. + return self.factory + return counter_reference + class DjangoModelFactory(base.Factory): """Factory for Django models. @@ -72,10 +84,6 @@ class DjangoModelFactory(base.Factory): class Meta: abstract = True # Optional, but explicit. - @classmethod - def _get_blank_options(cls): - return DjangoOptions() - _OLDSTYLE_ATTRIBUTES = base.Factory._OLDSTYLE_ATTRIBUTES.copy() _OLDSTYLE_ATTRIBUTES.update({ 'FACTORY_DJANGO_GET_OR_CREATE': 'django_get_or_create', -- cgit v1.2.3