Browse Source

Modified the implementation of get_object() to be consistent with the approach used elsewhere in the API. Also added documentation for get_object() which seems to have been accidentally omitted.

This is a BACKWARDS-INCOMPATIBLE CHANGE for anyone depending on the API for get_object() that was introduced (but not documented) in r14254.

git-svn-id: http://code.djangoproject.com/svn/django/trunk@14292 bcc190cf-cafb-0310-a4f2-bffc1f526a37
Russell Keith-Magee 14 years ago
parent
commit
a014ee0288

+ 2 - 2
django/views/generic/dates.py

@@ -443,7 +443,7 @@ class BaseDateDetailView(YearMixin, MonthMixin, DayMixin, DateMixin, BaseDetailV
     Detail view of a single object on a single date; this differs from the
     standard DetailView by accepting a year/month/day in the URL.
     """
-    def get_object(self, queryset=None, **kwargs):
+    def get_object(self, queryset=None):
         """
         Get the object this request displays.
         """
@@ -469,7 +469,7 @@ class BaseDateDetailView(YearMixin, MonthMixin, DayMixin, DateMixin, BaseDetailV
         lookup = _date_lookup_for_field(field, date)
         qs = qs.filter(**lookup)
 
-        return super(BaseDetailView, self).get_object(queryset=qs, **kwargs)
+        return super(BaseDetailView, self).get_object(queryset=qs)
 
 
 

+ 4 - 2
django/views/generic/detail.py

@@ -14,7 +14,7 @@ class SingleObjectMixin(object):
     slug_field = 'slug'
     context_object_name = None
 
-    def get_object(self, pk=None, slug=None, queryset=None, **kwargs):
+    def get_object(self, queryset=None):
         """
         Returns the object the view is displaying.
 
@@ -27,6 +27,8 @@ class SingleObjectMixin(object):
             queryset = self.get_queryset()
 
         # Next, try looking up by primary key.
+        pk = self.kwargs.get('pk', None)
+        slug = self.kwargs.get('slug', None)
         if pk is not None:
             queryset = queryset.filter(pk=pk)
 
@@ -92,7 +94,7 @@ class SingleObjectMixin(object):
 
 class BaseDetailView(SingleObjectMixin, View):
     def get(self, request, **kwargs):
-        self.object = self.get_object(**kwargs)
+        self.object = self.get_object()
         context = self.get_context_data(object=self.object)
         return self.render_to_response(context)
 

+ 5 - 5
django/views/generic/edit.py

@@ -2,8 +2,8 @@ from django.forms import models as model_forms
 from django.core.exceptions import ImproperlyConfigured
 from django.http import HttpResponseRedirect
 from django.views.generic.base import TemplateResponseMixin, View
-from django.views.generic.detail import (SingleObjectMixin, 
-                        SingleObjectTemplateResponseMixin, BaseDetailView) 
+from django.views.generic.detail import (SingleObjectMixin,
+                        SingleObjectTemplateResponseMixin, BaseDetailView)
 
 
 class FormMixin(object):
@@ -191,11 +191,11 @@ class BaseUpdateView(ModelFormMixin, ProcessFormView):
     Using this base class requires subclassing to provide a response mixin.
     """
     def get(self, request, *args, **kwargs):
-        self.object = self.get_object(**kwargs)
+        self.object = self.get_object()
         return super(BaseUpdateView, self).get(request, *args, **kwargs)
 
     def post(self, request, *args, **kwargs):
-        self.object = self.get_object(**kwargs)
+        self.object = self.get_object()
         return super(BaseUpdateView, self).post(request, *args, **kwargs)
 
     # PUT is a valid HTTP verb for creating (with a known URL) or editing an
@@ -218,7 +218,7 @@ class DeletionMixin(object):
     success_url = None
 
     def delete(self, request, *args, **kwargs):
-        self.object = self.get_object(**kwargs)
+        self.object = self.get_object()
         self.object.delete()
         return HttpResponseRedirect(self.get_success_url())
 

+ 15 - 2
docs/ref/class-based-views.txt

@@ -158,6 +158,19 @@ SingleObjectMixin
 
         Designates the name of the variable to use in the context.
 
+    .. method:: get_object(queryset=None)
+
+        Returns the single object that this view will display. If
+        ``queryset`` is provided, that queryset will be used as the
+        source of objects; otherwise,
+        :meth:`~SingleObjectMixin.get_queryset` will be used.
+        :meth:`~SingleObjectMixin.get_object` looks for a ``pk``
+        argument in the arguments to the view; if ``pk`` is found,
+        this method performs a primary-key based lookup using that
+        value. If no ``pk`` argument is found, it looks for a ``slug``
+        argument, and performs a slug lookup using the
+        :attr:`SingleObjectMixin.slug_field`.
+
     .. method:: get_queryset()
 
         Returns the queryset that will be used to retrieve the object that
@@ -311,7 +324,7 @@ MultipleObjectMixin
         objects from that page.
 
     .. method:: get_paginate_by(queryset)
-    
+
         Returns the number of items to paginate by, or ``None`` for no
         pagination. By default this simply returns the value of
         :attr:`MultipleObjectMixin.paginate_by`.
@@ -506,7 +519,7 @@ ProcessFormView
     A mixin that provides basic HTTP GET and POST workflow.
 
     .. method:: get(request, *args, **kwargs)
-    
+
         Constructs a form, then renders a response using a context that
         contains that form.
 

+ 2 - 2
docs/topics/class-based-views.txt

@@ -440,9 +440,9 @@ object, so we simply override it and wrap the call::
 
         queryset = Author.objects.all()
 
-        def get_object(self, **kwargs):
+        def get_object(self):
             # Call the superclass
-            object = super(AuthorDetailView, self).get_object(**kwargs)
+            object = super(AuthorDetailView, self).get_object()
             # Record the lass accessed date
             object.last_accessed = datetime.datetime.now()
             object.save()