summaryrefslogtreecommitdiff
path: root/django
diff options
context:
space:
mode:
authorMarc Tamlyn <marc.tamlyn@gmail.com>2013-08-09 04:06:23 -0700
committerMarc Tamlyn <marc.tamlyn@gmail.com>2013-08-09 04:06:23 -0700
commit4fa2738ff3ff2704140c8bcb6671d76e9f31f776 (patch)
treef3db831a64c24ec5b76cee653f8cfb9b52987cb2 /django
parent8442268869a691767788bcbb4df90ddb28abb8f2 (diff)
parentf8a6a4eba1b52dd634ab3e72637cd47412dcfa6e (diff)
Merge pull request #1460 from loic/ObjectMixins.get_queryset
Improved queryset handling and docs for (Single|Multiple)ObjectMixin.
Diffstat (limited to 'django')
-rw-r--r--django/views/generic/detail.py20
-rw-r--r--django/views/generic/list.py20
2 files changed, 26 insertions, 14 deletions
diff --git a/django/views/generic/detail.py b/django/views/generic/detail.py
index 23000641b4..5ce8092c67 100644
--- a/django/views/generic/detail.py
+++ b/django/views/generic/detail.py
@@ -57,19 +57,23 @@ class SingleObjectMixin(ContextMixin):
def get_queryset(self):
"""
- Get the queryset to look an object up against. May not be called if
- `get_object` is overridden.
+ Return the `QuerySet` that will be used to look up the object.
+
+ Note that this method is called by the default implementation of
+ `get_object` and may not be called if `get_object` is overriden.
"""
if self.queryset is None:
if self.model:
return self.model._default_manager.all()
else:
- raise ImproperlyConfigured("%(cls)s is missing a queryset. Define "
- "%(cls)s.model, %(cls)s.queryset, or override "
- "%(cls)s.get_queryset()." % {
- 'cls': self.__class__.__name__
- })
- return self.queryset._clone()
+ raise ImproperlyConfigured(
+ "%(cls)s is missing a QuerySet. Define "
+ "%(cls)s.model, %(cls)s.queryset, or override "
+ "%(cls)s.get_queryset()." % {
+ 'cls': self.__class__.__name__
+ }
+ )
+ return self.queryset.all()
def get_slug_field(self):
"""
diff --git a/django/views/generic/list.py b/django/views/generic/list.py
index 1aff3454f4..7381fd1be9 100644
--- a/django/views/generic/list.py
+++ b/django/views/generic/list.py
@@ -2,6 +2,7 @@ from __future__ import unicode_literals
from django.core.paginator import Paginator, InvalidPage
from django.core.exceptions import ImproperlyConfigured
+from django.db.models.query import QuerySet
from django.http import Http404
from django.utils.translation import ugettext as _
from django.views.generic.base import TemplateResponseMixin, ContextMixin, View
@@ -22,18 +23,25 @@ class MultipleObjectMixin(ContextMixin):
def get_queryset(self):
"""
- Get the list of items for this view. This must be an iterable, and may
- be a queryset (in which qs-specific behavior will be enabled).
+ Return the list of items for this view.
+
+ The return value must be an iterable and may be an instance of
+ `QuerySet` in which case `QuerySet` specific behavior will be enabled.
"""
if self.queryset is not None:
queryset = self.queryset
- if hasattr(queryset, '_clone'):
- queryset = queryset._clone()
+ if isinstance(queryset, QuerySet):
+ queryset = queryset.all()
elif self.model is not None:
queryset = self.model._default_manager.all()
else:
- raise ImproperlyConfigured("'%s' must define 'queryset' or 'model'"
- % self.__class__.__name__)
+ raise ImproperlyConfigured(
+ "%(cls)s is missing a QuerySet. Define "
+ "%(cls)s.model, %(cls)s.queryset, or override "
+ "%(cls)s.get_queryset()." % {
+ 'cls': self.__class__.__name__
+ }
+ )
return queryset
def paginate_queryset(self, queryset, page_size):