diff --git a/django/newforms/models.py b/django/newforms/models.py index 8d6ee1fda27c7..17fd1cf2e23fb 100644 --- a/django/newforms/models.py +++ b/django/newforms/models.py @@ -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) diff --git a/tests/modeltests/model_forms/models.py b/tests/modeltests/model_forms/models.py index 5e9584496e637..17c3b3551c924 100644 --- a/tests/modeltests/model_forms/models.py +++ b/tests/modeltests/model_forms/models.py @@ -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 #######################################################