Loading django/views/generic/detail.py +2 −2 Original line number Diff line number Diff line from __future__ import unicode_literals from django.core.exceptions import ImproperlyConfigured, ObjectDoesNotExist from django.core.exceptions import ImproperlyConfigured from django.db import models from django.http import Http404 from django.utils.translation import ugettext as _ Loading Loading @@ -50,7 +50,7 @@ class SingleObjectMixin(ContextMixin): try: # Get the single item from the filtered queryset obj = queryset.get() except ObjectDoesNotExist: except queryset.model.DoesNotExist: raise Http404(_("No %(verbose_name)s found matching the query") % {'verbose_name': queryset.model._meta.verbose_name}) return obj Loading tests/generic_views/models.py +12 −0 Original line number Diff line number Diff line from django.core.urlresolvers import reverse from django.db import models from django.db.models import QuerySet from django.db.models.manager import BaseManager from django.utils.encoding import python_2_unicode_compatible Loading Loading @@ -31,6 +33,13 @@ class Author(models.Model): return self.name class DoesNotExistQuerySet(QuerySet): def get(self, *args, **kwargs): raise Author.DoesNotExist DoesNotExistBookManager = BaseManager.from_queryset(DoesNotExistQuerySet) @python_2_unicode_compatible class Book(models.Model): name = models.CharField(max_length=300) Loading @@ -39,6 +48,9 @@ class Book(models.Model): authors = models.ManyToManyField(Author) pubdate = models.DateField() objects = models.Manager() does_not_exist = DoesNotExistBookManager() class Meta: ordering = ['-pubdate'] Loading tests/generic_views/test_detail.py +8 −1 Original line number Diff line number Diff line from __future__ import unicode_literals from django.core.exceptions import ImproperlyConfigured from django.core.exceptions import ImproperlyConfigured, ObjectDoesNotExist from django.test import TestCase from django.views.generic.base import View Loading @@ -25,6 +25,13 @@ class DetailViewTest(TestCase): self.assertEqual(res.context['author'], Author.objects.get(pk=1)) self.assertTemplateUsed(res, 'generic_views/author_detail.html') def test_detail_missing_object(self): res = self.client.get('/detail/author/500/') self.assertEqual(res.status_code, 404) def test_detail_object_does_not_exist(self): self.assertRaises(ObjectDoesNotExist, self.client.get, '/detail/doesnotexist/1/') def test_detail_by_custom_pk(self): res = self.client.get('/detail/author/bycustompk/1/') self.assertEqual(res.status_code, 200) Loading tests/generic_views/urls.py +2 −1 Original line number Diff line number Diff line Loading @@ -55,7 +55,8 @@ urlpatterns = patterns('', views.AuthorDetail.as_view(queryset=None)), (r'^detail/nonmodel/1/$', views.NonModelDetail.as_view()), (r'^detail/doesnotexist/(?P<pk>\d+)/$', views.ObjectDoesNotExistDetail.as_view()), # FormView (r'^contact/$', views.ContactView.as_view()), Loading tests/generic_views/views.py +5 −0 Original line number Diff line number Diff line Loading @@ -300,3 +300,8 @@ class NonModelDetail(generic.DetailView): def get_object(self, queryset=None): return NonModel() class ObjectDoesNotExistDetail(generic.DetailView): def get_queryset(self): return Book.does_not_exist.all() Loading
django/views/generic/detail.py +2 −2 Original line number Diff line number Diff line from __future__ import unicode_literals from django.core.exceptions import ImproperlyConfigured, ObjectDoesNotExist from django.core.exceptions import ImproperlyConfigured from django.db import models from django.http import Http404 from django.utils.translation import ugettext as _ Loading Loading @@ -50,7 +50,7 @@ class SingleObjectMixin(ContextMixin): try: # Get the single item from the filtered queryset obj = queryset.get() except ObjectDoesNotExist: except queryset.model.DoesNotExist: raise Http404(_("No %(verbose_name)s found matching the query") % {'verbose_name': queryset.model._meta.verbose_name}) return obj Loading
tests/generic_views/models.py +12 −0 Original line number Diff line number Diff line from django.core.urlresolvers import reverse from django.db import models from django.db.models import QuerySet from django.db.models.manager import BaseManager from django.utils.encoding import python_2_unicode_compatible Loading Loading @@ -31,6 +33,13 @@ class Author(models.Model): return self.name class DoesNotExistQuerySet(QuerySet): def get(self, *args, **kwargs): raise Author.DoesNotExist DoesNotExistBookManager = BaseManager.from_queryset(DoesNotExistQuerySet) @python_2_unicode_compatible class Book(models.Model): name = models.CharField(max_length=300) Loading @@ -39,6 +48,9 @@ class Book(models.Model): authors = models.ManyToManyField(Author) pubdate = models.DateField() objects = models.Manager() does_not_exist = DoesNotExistBookManager() class Meta: ordering = ['-pubdate'] Loading
tests/generic_views/test_detail.py +8 −1 Original line number Diff line number Diff line from __future__ import unicode_literals from django.core.exceptions import ImproperlyConfigured from django.core.exceptions import ImproperlyConfigured, ObjectDoesNotExist from django.test import TestCase from django.views.generic.base import View Loading @@ -25,6 +25,13 @@ class DetailViewTest(TestCase): self.assertEqual(res.context['author'], Author.objects.get(pk=1)) self.assertTemplateUsed(res, 'generic_views/author_detail.html') def test_detail_missing_object(self): res = self.client.get('/detail/author/500/') self.assertEqual(res.status_code, 404) def test_detail_object_does_not_exist(self): self.assertRaises(ObjectDoesNotExist, self.client.get, '/detail/doesnotexist/1/') def test_detail_by_custom_pk(self): res = self.client.get('/detail/author/bycustompk/1/') self.assertEqual(res.status_code, 200) Loading
tests/generic_views/urls.py +2 −1 Original line number Diff line number Diff line Loading @@ -55,7 +55,8 @@ urlpatterns = patterns('', views.AuthorDetail.as_view(queryset=None)), (r'^detail/nonmodel/1/$', views.NonModelDetail.as_view()), (r'^detail/doesnotexist/(?P<pk>\d+)/$', views.ObjectDoesNotExistDetail.as_view()), # FormView (r'^contact/$', views.ContactView.as_view()), Loading
tests/generic_views/views.py +5 −0 Original line number Diff line number Diff line Loading @@ -300,3 +300,8 @@ class NonModelDetail(generic.DetailView): def get_object(self, queryset=None): return NonModel() class ObjectDoesNotExistDetail(generic.DetailView): def get_queryset(self): return Book.does_not_exist.all()