summaryrefslogtreecommitdiff
path: root/tests/generic_views
diff options
context:
space:
mode:
authorChris Cogdon <chris.cogdon@dtexsystems.com>2015-12-29 10:58:43 -0800
committerTim Graham <timograham@gmail.com>2015-12-30 09:56:45 -0500
commit4b2dcfe04f5d9938e40c569ffdd169f3a712145d (patch)
tree2012f336642afe5ebf0cabbb2661cba1366c1058 /tests/generic_views
parent7df9aa3a33271706bf172eac77b5b0d02c971d77 (diff)
Fixed #26006 -- Fixed incorrect object reference in SingleObjectMixin.get_context_object_name().
Diffstat (limited to 'tests/generic_views')
-rw-r--r--tests/generic_views/test_detail.py13
-rw-r--r--tests/generic_views/urls.py2
-rw-r--r--tests/generic_views/views.py11
3 files changed, 26 insertions, 0 deletions
diff --git a/tests/generic_views/test_detail.py b/tests/generic_views/test_detail.py
index f9cfd8b9c1..9ffa3f82e7 100644
--- a/tests/generic_views/test_detail.py
+++ b/tests/generic_views/test_detail.py
@@ -140,6 +140,19 @@ class DetailViewTest(TestCase):
self.assertNotIn('author', res.context)
self.assertTemplateUsed(res, 'generic_views/author_detail.html')
+ def test_custom_detail(self):
+ """
+ AuthorCustomDetail overrides get() and ensures that
+ SingleObjectMixin.get_context_object_name() always uses the obj
+ parameter instead of self.object.
+ """
+ res = self.client.get('/detail/author/%s/custom_detail/' % self.author1.pk)
+ self.assertEqual(res.status_code, 200)
+ self.assertEqual(res.context['custom_author'], self.author1)
+ self.assertNotIn('author', res.context)
+ self.assertNotIn('object', res.context)
+ self.assertTemplateUsed(res, 'generic_views/author_detail.html')
+
def test_deferred_queryset_template_name(self):
class FormContext(SingleObjectTemplateResponseMixin):
request = RequestFactory().get('/')
diff --git a/tests/generic_views/urls.py b/tests/generic_views/urls.py
index 1a65277477..e95f9c01c7 100644
--- a/tests/generic_views/urls.py
+++ b/tests/generic_views/urls.py
@@ -50,6 +50,8 @@ urlpatterns = [
views.AuthorDetail.as_view(template_name='generic_views/about.html')),
url(r'^detail/author/(?P<pk>[0-9]+)/context_object_name/$',
views.AuthorDetail.as_view(context_object_name='thingy')),
+ url(r'^detail/author/(?P<pk>[0-9]+)/custom_detail/$',
+ views.AuthorCustomDetail.as_view()),
url(r'^detail/author/(?P<pk>[0-9]+)/dupe_context_object_name/$',
views.AuthorDetail.as_view(context_object_name='object')),
url(r'^detail/page/(?P<pk>[0-9]+)/field/$',
diff --git a/tests/generic_views/views.py b/tests/generic_views/views.py
index e5ed1e2971..01f044156d 100644
--- a/tests/generic_views/views.py
+++ b/tests/generic_views/views.py
@@ -34,6 +34,17 @@ class AuthorDetail(generic.DetailView):
queryset = Author.objects.all()
+class AuthorCustomDetail(generic.DetailView):
+ template_name = 'generic_views/author_detail.html'
+ queryset = Author.objects.all()
+
+ def get(self, request, *args, **kwargs):
+ # Ensures get_context_object_name() doesn't reference self.object.
+ author = self.get_object()
+ context = {'custom_' + self.get_context_object_name(author): author}
+ return self.render_to_response(context)
+
+
class PageDetail(generic.DetailView):
queryset = Page.objects.all()
template_name_field = 'template'