Browse files

Fixed #10121: Restored code lost in r9766 that prevented overwriting …

…an already-set blank=True FileField with blank. This would happen, for instance, in the admin if an object with a FileField was edited/saved but the file not re-uploaded, resulting in the association to the previously-uploaded file being lost. Adding the ability to re-blank FileFields when they are once set is the subject of a different ticket (#7048), for now the pre-9766 behavior here has just been restored in order to avoid unexpected data loss.  Thanks to Alex for help in understanding how to fix this without un-doing the intent of r9766.

git-svn-id: bcc190cf-cafb-0310-a4f2-bffc1f526a37
  • Loading branch information...
1 parent 2b1bb71 commit 11bfe7236609dad4c88d8352f64ed7a2888da936 @kmtracey kmtracey committed Feb 16, 2009
Showing with 16 additions and 0 deletions.
  1. +4 −0 django/db/models/fields/
  2. +12 −0 tests/modeltests/model_forms/
@@ -213,6 +213,10 @@ def get_filename(self, filename):
def generate_filename(self, instance, filename):
return os.path.join(self.get_directory_name(), self.get_filename(filename))
+ def save_form_data(self, instance, data):
+ if data:
+ setattr(instance,, data)
def formfield(self, **kwargs):
defaults = {'form_class': forms.FileField}
# If a file has been provided previously, then the form doesn't require
@@ -1030,6 +1030,18 @@ def __unicode__(self):
>>> instance.file
<FieldFile: tests/test3.txt>
+# Instance can be edited w/out re-uploading the file and existing file should be preserved.
+>>> f = TextFileForm(data={'description': u'New Description'}, instance=instance)
+>>> f.fields['file'].required = False
+>>> f.is_valid()
+>>> instance =
+>>> instance.description
+u'New Description'
+>>> instance.file
+<FieldFile: tests/test3.txt>
# Delete the current file since this is not done by Django.
>>> instance.file.delete()
>>> instance.delete()

0 comments on commit 11bfe72

Please sign in to comment.