mirror of https://github.com/django/django.git
Changed ModelForms to allow inheritance as long as their model attributes are the same.
git-svn-id: http://code.djangoproject.com/svn/django/trunk@6917 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
parent
e415eff0ea
commit
4c59ca6020
|
@ -245,14 +245,14 @@ class ModelFormMetaclass(type):
|
|||
|
||||
# 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)
|
||||
|
|
|
@ -143,7 +143,7 @@ familiar with the mechanics.
|
|||
... 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 @@ Traceback (most recent call last):
|
|||
...
|
||||
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 #######################################################
|
||||
|
||||
|
|
Loading…
Reference in New Issue