Fix .non_polymorphic(), returns a copy of the queryset

Just like .filter() and such do.
fix_request_path_info
Diederik van der Boor 2013-09-19 19:36:05 +02:00
parent 61e9a8050a
commit e1093ff1fb
2 changed files with 11 additions and 4 deletions

View File

@ -1,6 +1,12 @@
Changelog Changelog
========== ==========
Version 0.5.4 (in development)
------------------------------
* Fix ``.non_polymorphic()`` to returns a clone of the queryset, instead of effecting the existing queryset.
Version 0.5.3 (2013-09-17) Version 0.5.3 (2013-09-17)
-------------------------- --------------------------

View File

@ -67,8 +67,9 @@ class PolymorphicQuerySet(QuerySet):
"""switch off polymorphic behaviour for this query. """switch off polymorphic behaviour for this query.
When the queryset is evaluated, only objects of the type of the When the queryset is evaluated, only objects of the type of the
base class used for this query are returned.""" base class used for this query are returned."""
self.polymorphic_disabled = True qs = self._clone()
return self qs.polymorphic_disabled = True
return qs
def instance_of(self, *args): def instance_of(self, *args):
"""Filter the queryset to only include the classes in args (and their subclasses). """Filter the queryset to only include the classes in args (and their subclasses).
@ -109,8 +110,8 @@ class PolymorphicQuerySet(QuerySet):
"""translate the polymorphic field paths in the kwargs, then call vanilla aggregate. """translate the polymorphic field paths in the kwargs, then call vanilla aggregate.
We need no polymorphic object retrieval for aggregate => switch it off.""" We need no polymorphic object retrieval for aggregate => switch it off."""
self._process_aggregate_args(args, kwargs) self._process_aggregate_args(args, kwargs)
self.polymorphic_disabled = True qs = self.non_polymorphic()
return super(PolymorphicQuerySet, self).aggregate(*args, **kwargs) return super(PolymorphicQuerySet, qs).aggregate(*args, **kwargs)
# Since django_polymorphic 'V1.0 beta2', extra() always returns polymorphic results.^ # Since django_polymorphic 'V1.0 beta2', extra() always returns polymorphic results.^
# The resulting objects are required to have a unique primary key within the result set # The resulting objects are required to have a unique primary key within the result set