mirror of
https://github.com/django/django.git
synced 2025-10-25 14:46:09 +00:00
Fixed #10208: ModelAdmin now respects the exclude and field atributes of custom ModelForms. Thanks, Alex Gaynor.
git-svn-id: http://code.djangoproject.com/svn/django/trunk@10619 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
@@ -344,16 +344,34 @@ class ModelForm(BaseModelForm):
|
||||
|
||||
def modelform_factory(model, form=ModelForm, fields=None, exclude=None,
|
||||
formfield_callback=lambda f: f.formfield()):
|
||||
# HACK: we should be able to construct a ModelForm without creating
|
||||
# and passing in a temporary inner class
|
||||
class Meta:
|
||||
pass
|
||||
setattr(Meta, 'model', model)
|
||||
setattr(Meta, 'fields', fields)
|
||||
setattr(Meta, 'exclude', exclude)
|
||||
# Create the inner Meta class. FIXME: ideally, we should be able to
|
||||
# construct a ModelForm without creating and passing in a temporary
|
||||
# inner class.
|
||||
|
||||
# Build up a list of attributes that the Meta object will have.
|
||||
attrs = {'model': model}
|
||||
if fields is not None:
|
||||
attrs['fields'] = fields
|
||||
if exclude is not None:
|
||||
attrs['exclude'] = exclude
|
||||
|
||||
# If parent form class already has an inner Meta, the Meta we're
|
||||
# creating needs to inherit from the parent's inner meta.
|
||||
parent = (object,)
|
||||
if hasattr(form, 'Meta'):
|
||||
parent = (form.Meta, object)
|
||||
Meta = type('Meta', parent, attrs)
|
||||
|
||||
# Give this new form class a reasonable name.
|
||||
class_name = model.__name__ + 'Form'
|
||||
return ModelFormMetaclass(class_name, (form,), {'Meta': Meta,
|
||||
'formfield_callback': formfield_callback})
|
||||
|
||||
# Class attributes for the new form class.
|
||||
form_class_attrs = {
|
||||
'Meta': Meta,
|
||||
'formfield_callback': formfield_callback
|
||||
}
|
||||
|
||||
return ModelFormMetaclass(class_name, (form,), form_class_attrs)
|
||||
|
||||
|
||||
# ModelFormSets ##############################################################
|
||||
@@ -617,13 +635,6 @@ def inlineformset_factory(parent_model, model, form=ModelForm,
|
||||
# enforce a max_num=1 when the foreign key to the parent model is unique.
|
||||
if fk.unique:
|
||||
max_num = 1
|
||||
if fields is not None:
|
||||
fields = list(fields)
|
||||
fields.append(fk.name)
|
||||
else:
|
||||
# get all the fields for this model that will be generated.
|
||||
fields = fields_for_model(model, fields, exclude, formfield_callback).keys()
|
||||
fields.append(fk.name)
|
||||
kwargs = {
|
||||
'form': form,
|
||||
'formfield_callback': formfield_callback,
|
||||
|
||||
Reference in New Issue
Block a user