summaryrefslogtreecommitdiff
path: root/django/forms
diff options
context:
space:
mode:
Diffstat (limited to 'django/forms')
-rw-r--r--django/forms/models.py10
1 files changed, 10 insertions, 0 deletions
diff --git a/django/forms/models.py b/django/forms/models.py
index 99f7ef5bfb..cd2191307e 100644
--- a/django/forms/models.py
+++ b/django/forms/models.py
@@ -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