Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

Changed ModelForms to allow inheritance as long as their model attrib…

…utes are the same.

git-svn-id: http://code.djangoproject.com/svn/django/trunk@6917 bcc190cf-cafb-0310-a4f2-bffc1f526a37
  • Loading branch information...
commit 4c59ca602063f5de88595dfb18b0f83bc7bba0f7 1 parent e415eff
Joseph Kocherhans jkocherhans authored
10 django/newforms/models.py
View
@@ -245,14 +245,14 @@ def __new__(cls, name, bases, attrs):
# If a model is defined, extract form fields from it and add them to base_fields
if attrs['_meta'].model is not None:
- # Don't allow a subclass to define a Meta model if a parent class has.
- # Technically the right fields would be generated, but the save
- # method will not deal with more than one model.
+ # Don't allow a subclass to define a different Meta model than a
+ # parent class has. Technically the right fields would be generated,
+ # but the save method will not deal with more than one model.
for base in bases:
base_opts = getattr(base, '_meta', None)
base_model = getattr(base_opts, 'model', None)
- if base_model is not None:
- raise ImproperlyConfigured('%s defines more than one model.' % name)
+ if base_model and base_model is not opts.model:
+ raise ImproperlyConfigured('%s defines a different model than its parent.' % name)
model_fields = fields_for_model(opts.model, opts.fields, opts.exclude)
# fields declared in base classes override fields from the model
model_fields.update(declared_fields)
8 tests/modeltests/model_forms/models.py
View
@@ -143,7 +143,7 @@ def __unicode__(self):
... model = Article
Traceback (most recent call last):
...
-ImproperlyConfigured: BadForm defines more than one model.
+ImproperlyConfigured: BadForm defines a different model than its parent.
>>> class ArticleForm(ModelForm):
... class Meta:
@@ -155,6 +155,12 @@ def __unicode__(self):
...
ImproperlyConfigured: BadForm's base classes define more than one model.
+This one is OK since the subclass specifies the same model as the parent.
+
+>>> class SubCategoryForm(CategoryForm):
+... class Meta:
+... model = Category
+
# Old form_for_x tests #######################################################
Please sign in to comment.
Something went wrong with that request. Please try again.