From 484fcd34a4819ff11ef72f3c9e1eb467a282b2f6 Mon Sep 17 00:00:00 2001 From: Anssi Kääriäinen Date: Sat, 9 Jun 2012 01:12:14 +0300 Subject: Fixed #16418 -- Made generic views work with ModelForms Generic views assumed any object's _meta will be model Options. This is not true for ModelForms for example. Took isinstance(obj, Model) in use instead. --- django/views/generic/detail.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) (limited to 'django') diff --git a/django/views/generic/detail.py b/django/views/generic/detail.py index 8cc413aa65..a5ddb5fe3e 100644 --- a/django/views/generic/detail.py +++ b/django/views/generic/detail.py @@ -1,6 +1,7 @@ from __future__ import unicode_literals from django.core.exceptions import ImproperlyConfigured, ObjectDoesNotExist +from django.db import models from django.http import Http404 from django.utils.translation import ugettext as _ from django.views.generic.base import TemplateResponseMixin, ContextMixin, View @@ -81,7 +82,7 @@ class SingleObjectMixin(ContextMixin): """ if self.context_object_name: return self.context_object_name - elif hasattr(obj, '_meta'): + elif isinstance(obj, models.Model): return obj._meta.object_name.lower() else: return None @@ -128,13 +129,13 @@ class SingleObjectTemplateResponseMixin(TemplateResponseMixin): # The least-specific option is the default /_detail.html; # only use this if the object in question is a model. - if hasattr(self.object, '_meta'): + if isinstance(self.object, models.Model): names.append("%s/%s%s.html" % ( self.object._meta.app_label, self.object._meta.object_name.lower(), self.template_name_suffix )) - elif hasattr(self, 'model') and hasattr(self.model, '_meta'): + elif hasattr(self, 'model') and self.model is not None and issubclass(self.model, models.Model): names.append("%s/%s%s.html" % ( self.model._meta.app_label, self.model._meta.object_name.lower(), -- cgit v1.3