From: Joseph Spiros Date: Tue, 29 Jun 2010 23:58:33 +0000 (-0400) Subject: Fixed a bug in ContentTypeSubclassLimiter whereby it would only return direct subclas... X-Git-Tag: philo-0.9~63 X-Git-Url: http://git.ithinksw.org/philo.git/commitdiff_plain/99a36fb8d97f1a55da08020758689904a0eb922f 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. --- 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)