Replace get_query_set with assignment.

Avoid calling the super class by accident, potentially causing loops.
Follow the django-mptt approach here.
fix_request_path_info
Diederik van der Boor 2014-09-22 14:56:21 +02:00
parent ea160669cf
commit cf6d2a4a41
2 changed files with 9 additions and 9 deletions

View File

@ -4,6 +4,7 @@
""" """
from __future__ import unicode_literals from __future__ import unicode_literals
import warnings import warnings
import django
from django.db import models from django.db import models
from polymorphic.query import PolymorphicQuerySet from polymorphic.query import PolymorphicQuerySet
@ -33,9 +34,9 @@ class PolymorphicManager(models.Manager):
def get_queryset(self): def get_queryset(self):
return self.queryset_class(self.model, using=self._db) return self.queryset_class(self.model, using=self._db)
def get_query_set(self): # For Django 1.5
# Maintains Django <= 1.5 compatibility if django.VERSION < (1, 7):
return self.get_queryset() get_query_set = get_queryset
# Proxy all unknown method calls to the queryset, so that its members are # Proxy all unknown method calls to the queryset, so that its members are
# directly accessible as PolymorphicModel.objects.* # directly accessible as PolymorphicModel.objects.*
@ -44,7 +45,7 @@ class PolymorphicManager(models.Manager):
def __getattr__(self, name): def __getattr__(self, name):
if name.startswith('__'): if name.startswith('__'):
return super(PolymorphicManager, self).__getattr__(self, name) return super(PolymorphicManager, self).__getattr__(self, name)
return getattr(self.get_query_set(), name) return getattr(self.get_queryset(), name)
def __unicode__(self): def __unicode__(self):
return '%s (PolymorphicManager) using %s' % (self.__class__.__name__, self.queryset_class.__name__) return '%s (PolymorphicManager) using %s' % (self.__class__.__name__, self.queryset_class.__name__)

View File

@ -113,8 +113,8 @@ class MyManager(PolymorphicManager):
def get_queryset(self): def get_queryset(self):
return super(MyManager, self).get_queryset().order_by('-field1') return super(MyManager, self).get_queryset().order_by('-field1')
def get_query_set(self): # Django <= 1.5 compatibility
return self.get_queryset() get_query_set = get_queryset
class ModelWithMyManager(ShowFieldTypeAndContent, Model2A): class ModelWithMyManager(ShowFieldTypeAndContent, Model2A):
objects = MyManager() objects = MyManager()
@ -149,9 +149,8 @@ class PlainMyManager(models.Manager):
def get_queryset(self): def get_queryset(self):
return PlainMyManagerQuerySet(self.model, using=self._db) return PlainMyManagerQuerySet(self.model, using=self._db)
def get_query_set(self): # Django <= 1.5 compatibility
# Maintains Django <= 1.5 compatibility get_query_set = get_queryset
return self.get_queryset()
class PlainParentModelWithManager(models.Model): class PlainParentModelWithManager(models.Model):
pass pass