From 99a36fb8d97f1a55da08020758689904a0eb922f Mon Sep 17 00:00:00 2001 From: Joseph Spiros Date: Tue, 29 Jun 2010 19:58:33 -0400 Subject: [PATCH] Fixed a bug in ContentTypeSubclassLimiter whereby it would only return direct subclasses of the specified class. It now returns all non-abstract model subclasses, however deep in the class hierarchy. --- utils.py | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/utils.py b/utils.py index 5fc3274..340e9e4 100644 --- a/utils.py +++ b/utils.py @@ -40,16 +40,19 @@ class ContentTypeSubclassLimiter(ContentTypeLimiter): def q_object(self): contenttype_pks = [] - for subclass in self.cls.__subclasses__(): - try: - if issubclass(subclass, models.Model): - if not subclass._meta.abstract: - if not self.inclusive and subclass is self.cls: - continue - contenttype = ContentType.objects.get_for_model(subclass) - contenttype_pks.append(contenttype.pk) - except: - pass + def handle_subclasses(cls): + for subclass in cls.__subclasses__(): + try: + if issubclass(subclass, models.Model): + if not subclass._meta.abstract: + if not self.inclusive and subclass is self.cls: + continue + contenttype = ContentType.objects.get_for_model(subclass) + contenttype_pks.append(contenttype.pk) + handle_subclasses(subclass) + except: + pass + handle_subclasses(self.cls) return models.Q(pk__in=contenttype_pks) -- 2.20.1