From 0b5270eab393fad20faa7a6a9720af18c97b1773 Mon Sep 17 00:00:00 2001 From: Raphaƫl Barrois Date: Sun, 31 May 2015 10:47:28 +0100 Subject: Properly handle custom Django managers (Closes #201). The actual behavior of Django with custom managers and inherited abstract models is rather complex, so this had to be adapted to the actual Django source code. --- factory/django.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) (limited to 'factory') diff --git a/factory/django.py b/factory/django.py index 74e4fdb..e4a3ea7 100644 --- a/factory/django.py +++ b/factory/django.py @@ -115,7 +115,14 @@ class DjangoModelFactory(base.Factory): if model_class is None: raise base.AssociatedClassError("No model set on %s.%s.Meta" % (cls.__module__, cls.__name__)) - manager = model_class.objects + + try: + manager = model_class.objects + except AttributeError: + # When inheriting from an abstract model with a custom + # manager, the class has no 'objects' field. + manager = model_class._default_manager + if cls._meta.database != DEFAULT_DB_ALIAS: manager = manager.using(cls._meta.database) return manager -- cgit v1.2.3