mirror of
https://github.com/django/django.git
synced 2025-07-04 09:49:12 +00:00
newforms-admin: Fixed handling of file uploads in inline formsets.
git-svn-id: http://code.djangoproject.com/svn/django/branches/newforms-admin@5833 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
parent
4cc0d9375e
commit
0f92ac52cb
@ -420,7 +420,7 @@ class ModelAdmin(BaseModelAdmin):
|
|||||||
if request.method == 'POST':
|
if request.method == 'POST':
|
||||||
form = ModelForm(request.POST, request.FILES)
|
form = ModelForm(request.POST, request.FILES)
|
||||||
for FormSet in self.get_inline_formsets():
|
for FormSet in self.get_inline_formsets():
|
||||||
inline_formset = FormSet(data=request.POST)
|
inline_formset = FormSet(data=request.POST, files=request.FILES)
|
||||||
inline_formsets.append(inline_formset)
|
inline_formsets.append(inline_formset)
|
||||||
if all_valid(inline_formsets) and form.is_valid():
|
if all_valid(inline_formsets) and form.is_valid():
|
||||||
return self.save_add(request, model, form, inline_formsets, '../%s/')
|
return self.save_add(request, model, form, inline_formsets, '../%s/')
|
||||||
@ -470,7 +470,7 @@ class ModelAdmin(BaseModelAdmin):
|
|||||||
if request.method == 'POST':
|
if request.method == 'POST':
|
||||||
form = ModelForm(request.POST, request.FILES)
|
form = ModelForm(request.POST, request.FILES)
|
||||||
for FormSet in self.get_inline_formsets():
|
for FormSet in self.get_inline_formsets():
|
||||||
inline_formset = FormSet(obj, request.POST)
|
inline_formset = FormSet(obj, request.POST, request.FILES)
|
||||||
inline_formsets.append(inline_formset)
|
inline_formsets.append(inline_formset)
|
||||||
|
|
||||||
if all_valid(inline_formsets) and form.is_valid():
|
if all_valid(inline_formsets) and form.is_valid():
|
||||||
|
@ -124,7 +124,7 @@ def render_change_form(model_admin, model, manipulator, context, add=False, chan
|
|||||||
'change': change,
|
'change': change,
|
||||||
'has_delete_permission': context['perms'][app_label][opts.get_delete_permission()],
|
'has_delete_permission': context['perms'][app_label][opts.get_delete_permission()],
|
||||||
'has_change_permission': context['perms'][app_label][opts.get_change_permission()],
|
'has_change_permission': context['perms'][app_label][opts.get_change_permission()],
|
||||||
'has_file_field': opts.has_field_type(models.FileField),
|
'has_file_field': True, # FIXME - this should check if form or formsets have a FileField,
|
||||||
'has_absolute_url': hasattr(model, 'get_absolute_url'),
|
'has_absolute_url': hasattr(model, 'get_absolute_url'),
|
||||||
'ordered_objects': ordered_objects,
|
'ordered_objects': ordered_objects,
|
||||||
'inline_related_objects': inline_related_objects,
|
'inline_related_objects': inline_related_objects,
|
||||||
|
@ -20,15 +20,16 @@ class ManagementForm(Form):
|
|||||||
class BaseFormSet(object):
|
class BaseFormSet(object):
|
||||||
"""A collection of instances of the same Form class."""
|
"""A collection of instances of the same Form class."""
|
||||||
|
|
||||||
def __init__(self, data=None, auto_id='id_%s', prefix=None, initial=None):
|
def __init__(self, data=None, files=None, auto_id='id_%s', prefix=None, initial=None):
|
||||||
self.is_bound = data is not None
|
self.is_bound = data is not None and files is not None
|
||||||
self.prefix = prefix or 'form'
|
self.prefix = prefix or 'form'
|
||||||
self.auto_id = auto_id
|
self.auto_id = auto_id
|
||||||
self.data = data
|
self.data = data
|
||||||
|
self.files = files
|
||||||
self.initial = initial
|
self.initial = initial
|
||||||
# initialization is different depending on whether we recieved data, initial, or nothing
|
# initialization is different depending on whether we recieved data, initial, or nothing
|
||||||
if data:
|
if data or files:
|
||||||
self.management_form = ManagementForm(data, auto_id=self.auto_id, prefix=self.prefix)
|
self.management_form = ManagementForm(data, files, auto_id=self.auto_id, prefix=self.prefix)
|
||||||
if self.management_form.is_valid():
|
if self.management_form.is_valid():
|
||||||
self.total_forms = self.management_form.cleaned_data[FORM_COUNT_FIELD_NAME]
|
self.total_forms = self.management_form.cleaned_data[FORM_COUNT_FIELD_NAME]
|
||||||
self.required_forms = self.total_forms - self.num_extra
|
self.required_forms = self.total_forms - self.num_extra
|
||||||
@ -56,6 +57,8 @@ class BaseFormSet(object):
|
|||||||
kwargs = {'auto_id': self.auto_id, 'prefix': self.add_prefix(i)}
|
kwargs = {'auto_id': self.auto_id, 'prefix': self.add_prefix(i)}
|
||||||
if self.data:
|
if self.data:
|
||||||
kwargs['data'] = self.data
|
kwargs['data'] = self.data
|
||||||
|
if self.files:
|
||||||
|
kwargs['files'] = self.files
|
||||||
add_form = FormClass(**kwargs)
|
add_form = FormClass(**kwargs)
|
||||||
self.add_fields(add_form, i)
|
self.add_fields(add_form, i)
|
||||||
add_forms.append(add_form)
|
add_forms.append(add_form)
|
||||||
@ -72,6 +75,8 @@ class BaseFormSet(object):
|
|||||||
kwargs = {'auto_id': self.auto_id, 'prefix': self.add_prefix(i)}
|
kwargs = {'auto_id': self.auto_id, 'prefix': self.add_prefix(i)}
|
||||||
if self.data:
|
if self.data:
|
||||||
kwargs['data'] = self.data
|
kwargs['data'] = self.data
|
||||||
|
if self.files:
|
||||||
|
kwargs['files'] = self.files
|
||||||
if self.initial:
|
if self.initial:
|
||||||
kwargs['initial'] = self.initial[i]
|
kwargs['initial'] = self.initial[i]
|
||||||
change_form = FormClass(**kwargs)
|
change_form = FormClass(**kwargs)
|
||||||
|
@ -234,9 +234,9 @@ class BaseModelFormSet(BaseFormSet):
|
|||||||
"""
|
"""
|
||||||
model = None
|
model = None
|
||||||
|
|
||||||
def __init__(self, data=None, auto_id='id_%s', prefix=None, instances=None):
|
def __init__(self, data=None, files=None, auto_id='id_%s', prefix=None, instances=None):
|
||||||
self.instances = instances
|
self.instances = instances
|
||||||
kwargs = {'data': data, 'auto_id': auto_id, 'prefix': prefix}
|
kwargs = {'data': data, 'files': files, 'auto_id': auto_id, 'prefix': prefix}
|
||||||
if instances:
|
if instances:
|
||||||
kwargs['initial'] = [initial_data(instance) for instance in instances]
|
kwargs['initial'] = [initial_data(instance) for instance in instances]
|
||||||
super(BaseModelFormSet, self).__init__(**kwargs)
|
super(BaseModelFormSet, self).__init__(**kwargs)
|
||||||
@ -287,12 +287,12 @@ def formset_for_model(model, form=BaseForm, formfield_callback=lambda f: f.formf
|
|||||||
|
|
||||||
class InlineFormset(BaseModelFormSet):
|
class InlineFormset(BaseModelFormSet):
|
||||||
"""A formset for child objects related to a parent."""
|
"""A formset for child objects related to a parent."""
|
||||||
def __init__(self, instance=None, data=None):
|
def __init__(self, instance=None, data=None, files=None):
|
||||||
from django.db.models.fields.related import RelatedObject
|
from django.db.models.fields.related import RelatedObject
|
||||||
self.instance = instance
|
self.instance = instance
|
||||||
# is there a better way to get the object descriptor?
|
# is there a better way to get the object descriptor?
|
||||||
self.rel_name = RelatedObject(self.fk.rel.to, self.model, self.fk).get_accessor_name()
|
self.rel_name = RelatedObject(self.fk.rel.to, self.model, self.fk).get_accessor_name()
|
||||||
super(InlineFormset, self).__init__(data, instances=self.get_inline_objects(), prefix=self.rel_name)
|
super(InlineFormset, self).__init__(data, files, instances=self.get_inline_objects(), prefix=self.rel_name)
|
||||||
|
|
||||||
def get_inline_objects(self):
|
def get_inline_objects(self):
|
||||||
if self.instance is None:
|
if self.instance is None:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user