mirror of
https://github.com/django/django.git
synced 2025-10-24 22:26:08 +00:00
[1.0.X] Fixed #9418 -- When saving a model form, defer saving of file-type fields until after other fields, so that callable upload_to methods can use data from the other fields. Thanks to Bernd Schlapsi for the report and initial patch.
[9334] from trunk. git-svn-id: http://code.djangoproject.com/svn/django/branches/releases/1.0.X@9335 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
@@ -41,6 +41,7 @@ def save_instance(form, instance, fields=None, fail_message='saved',
|
||||
raise ValueError("The %s could not be %s because the data didn't"
|
||||
" validate." % (opts.object_name, fail_message))
|
||||
cleaned_data = form.cleaned_data
|
||||
file_field_list = []
|
||||
for f in opts.fields:
|
||||
if not f.editable or isinstance(f, models.AutoField) \
|
||||
or not f.name in cleaned_data:
|
||||
@@ -49,7 +50,16 @@ def save_instance(form, instance, fields=None, fail_message='saved',
|
||||
continue
|
||||
if exclude and f.name in exclude:
|
||||
continue
|
||||
# Defer saving file-type fields until after the other fields, so a
|
||||
# callable upload_to can use the values from other fields.
|
||||
if isinstance(f, models.FileField):
|
||||
file_field_list.append(f)
|
||||
else:
|
||||
f.save_form_data(instance, cleaned_data[f.name])
|
||||
|
||||
for f in file_field_list:
|
||||
f.save_form_data(instance, cleaned_data[f.name])
|
||||
|
||||
# Wrap up the saving of m2m data as a function.
|
||||
def save_m2m():
|
||||
opts = instance._meta
|
||||
|
||||
Reference in New Issue
Block a user