From cf6d2a4a418fee664a2c134dc5b00b56c06286a9 Mon Sep 17 00:00:00 2001 From: Diederik van der Boor Date: Mon, 22 Sep 2014 14:56:21 +0200 Subject: [PATCH] Replace get_query_set with assignment. Avoid calling the super class by accident, potentially causing loops. Follow the django-mptt approach here. --- polymorphic/manager.py | 9 +++++---- polymorphic/tests.py | 9 ++++----- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/polymorphic/manager.py b/polymorphic/manager.py index 3c386a8..56ba26a 100644 --- a/polymorphic/manager.py +++ b/polymorphic/manager.py @@ -4,6 +4,7 @@ """ from __future__ import unicode_literals import warnings +import django from django.db import models from polymorphic.query import PolymorphicQuerySet @@ -33,9 +34,9 @@ class PolymorphicManager(models.Manager): def get_queryset(self): return self.queryset_class(self.model, using=self._db) - def get_query_set(self): - # Maintains Django <= 1.5 compatibility - return self.get_queryset() + # For Django 1.5 + if django.VERSION < (1, 7): + get_query_set = get_queryset # Proxy all unknown method calls to the queryset, so that its members are # directly accessible as PolymorphicModel.objects.* @@ -44,7 +45,7 @@ class PolymorphicManager(models.Manager): def __getattr__(self, name): if name.startswith('__'): return super(PolymorphicManager, self).__getattr__(self, name) - return getattr(self.get_query_set(), name) + return getattr(self.get_queryset(), name) def __unicode__(self): return '%s (PolymorphicManager) using %s' % (self.__class__.__name__, self.queryset_class.__name__) diff --git a/polymorphic/tests.py b/polymorphic/tests.py index fbb8614..5512d80 100644 --- a/polymorphic/tests.py +++ b/polymorphic/tests.py @@ -113,8 +113,8 @@ class MyManager(PolymorphicManager): def get_queryset(self): return super(MyManager, self).get_queryset().order_by('-field1') - def get_query_set(self): - return self.get_queryset() + # Django <= 1.5 compatibility + get_query_set = get_queryset class ModelWithMyManager(ShowFieldTypeAndContent, Model2A): objects = MyManager() @@ -149,9 +149,8 @@ class PlainMyManager(models.Manager): def get_queryset(self): return PlainMyManagerQuerySet(self.model, using=self._db) - def get_query_set(self): - # Maintains Django <= 1.5 compatibility - return self.get_queryset() + # Django <= 1.5 compatibility + get_query_set = get_queryset class PlainParentModelWithManager(models.Model): pass