Skip to content

Commit

Permalink
Fixed #13584 -- Optionally allow empty files with django.forms.FileFi…
Browse files Browse the repository at this point in the history
…eld. Thanks for the patch erickr and closedbracket.

git-svn-id: http://code.djangoproject.com/svn/django/trunk@16090 bcc190cf-cafb-0310-a4f2-bffc1f526a37
  • Loading branch information
SmileyChris committed Apr 22, 2011
1 parent c77372c commit 534c427
Show file tree
Hide file tree
Showing 3 changed files with 13 additions and 2 deletions.
3 changes: 2 additions & 1 deletion django/forms/fields.py
Original file line number Diff line number Diff line change
Expand Up @@ -450,6 +450,7 @@ class FileField(Field):

def __init__(self, *args, **kwargs):
self.max_length = kwargs.pop('max_length', None)
self.allow_empty_file = kwargs.pop('allow_empty_file', False)
super(FileField, self).__init__(*args, **kwargs)

def to_python(self, data):
Expand All @@ -468,7 +469,7 @@ def to_python(self, data):
raise ValidationError(self.error_messages['max_length'] % error_values)
if not file_name:
raise ValidationError(self.error_messages['invalid'])
if not file_size:
if not self.allow_empty_file and not file_size:
raise ValidationError(self.error_messages['empty'])

return data
Expand Down
7 changes: 6 additions & 1 deletion docs/ref/forms/fields.txt
Original file line number Diff line number Diff line change
Expand Up @@ -503,10 +503,15 @@ given length.
* Empty value: ``None``
* Normalizes to: An ``UploadedFile`` object that wraps the file content
and file name into a single object.
* Validates that non-empty file data has been bound to the form.
* Can validate that non-empty file data has been bound to the form.
* Error message keys: ``required``, ``invalid``, ``missing``, ``empty``,
``max_length``

Has two optional arguments for validation, ''max_length'' and
''allow_empty_file''. If provided, these ensure that the file name is at
most the given length, and that validation will succeed even if the file
content is empty.

To learn more about the ``UploadedFile`` object, see the :doc:`file uploads
documentation </topics/http/file-uploads>`.

Expand Down
5 changes: 5 additions & 0 deletions tests/regressiontests/forms/tests/fields.py
Original file line number Diff line number Diff line change
Expand Up @@ -506,6 +506,11 @@ def test_filefield_2(self):
self.assertEqual('files/test2.pdf', f.clean(None, 'files/test2.pdf'))
self.assertEqual(SimpleUploadedFile, type(f.clean(SimpleUploadedFile('name', 'Some File Content'))))

def test_filefield_3(self):
f = FileField(allow_empty_file=True)
self.assertEqual(SimpleUploadedFile,
type(f.clean(SimpleUploadedFile('name', ''))))

# URLField ##################################################################

def test_urlfield_1(self):
Expand Down

0 comments on commit 534c427

Please sign in to comment.