Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

Fixed #15877 -- Improved exception when ModelForm has no model class

Thanks theaspect at gmail.com for the report and volrath for the
patch.
  • Loading branch information...
commit cc53d9b30bd73c12413c28101d5db9f9f4df517c 1 parent a05ab44
@claudep claudep authored
Showing with 18 additions and 2 deletions.
  1. +2 −2 django/forms/models.py
  2. +16 −0 tests/modeltests/model_forms/tests.py
View
4 django/forms/models.py
@@ -233,9 +233,9 @@ def __init__(self, data=None, files=None, auto_id='id_%s', prefix=None,
initial=None, error_class=ErrorList, label_suffix=':',
empty_permitted=False, instance=None):
opts = self._meta
+ if opts.model is None:
+ raise ValueError('ModelForm has no model class specified.')
if instance is None:
- if opts.model is None:
- raise ValueError('ModelForm has no model class specified.')
# if we didn't get an instance, instantiate a new one
self.instance = opts.model()
object_data = {}
View
16 tests/modeltests/model_forms/tests.py
@@ -133,6 +133,9 @@ class ShortCategory(forms.ModelForm):
slug = forms.CharField(max_length=5)
url = forms.CharField(max_length=3)
+ class Meta:
+ model = Category
+
class ImprovedArticleForm(forms.ModelForm):
class Meta:
model = ImprovedArticle
@@ -277,6 +280,19 @@ class BadForm(ArticleForm, BaseCategoryForm):
['headline', 'slug', 'pub_date', 'writer', 'article', 'categories', 'status']
)
+ def test_invalid_meta_model(self):
+ class InvalidModelForm(forms.ModelForm):
+ class Meta:
+ pass # no model
+
+ # Can't create new form
+ with self.assertRaises(ValueError):
+ f = InvalidModelForm()
+
+ # Even if you provide a model instance
+ with self.assertRaises(ValueError):
+ f = InvalidModelForm(instance=Category)
+
def test_subcategory_form(self):
class SubCategoryForm(BaseCategoryForm):
""" Subclassing without specifying a Meta on the class will use
Please sign in to comment.
Something went wrong with that request. Please try again.