summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris Beaven <smileychris@gmail.com>2011-04-22 21:18:27 +0000
committerChris Beaven <smileychris@gmail.com>2011-04-22 21:18:27 +0000
commit534c427b20237fb4224323c6f626fa68720545ee (patch)
tree04f5fba897392d1af2aafc0acb45dee7bd991517
parentc77372cad034b06c1b7239ff6e1284c832f4a541 (diff)
Fixed #13584 -- Optionally allow empty files with django.forms.FileField. Thanks for the patch erickr and closedbracket.
git-svn-id: http://code.djangoproject.com/svn/django/trunk@16090 bcc190cf-cafb-0310-a4f2-bffc1f526a37
-rw-r--r--django/forms/fields.py3
-rw-r--r--docs/ref/forms/fields.txt7
-rw-r--r--tests/regressiontests/forms/tests/fields.py5
3 files changed, 13 insertions, 2 deletions
diff --git a/django/forms/fields.py b/django/forms/fields.py
index 1df935b1a1..9538e27fbe 100644
--- a/django/forms/fields.py
+++ b/django/forms/fields.py
@@ -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):
@@ -468,7 +469,7 @@ class FileField(Field):
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
diff --git a/docs/ref/forms/fields.txt b/docs/ref/forms/fields.txt
index 338a80655e..3bc0659c3d 100644
--- a/docs/ref/forms/fields.txt
+++ b/docs/ref/forms/fields.txt
@@ -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>`.
diff --git a/tests/regressiontests/forms/tests/fields.py b/tests/regressiontests/forms/tests/fields.py
index f76e7327eb..f5bb4637fd 100644
--- a/tests/regressiontests/forms/tests/fields.py
+++ b/tests/regressiontests/forms/tests/fields.py
@@ -506,6 +506,11 @@ class FieldsTests(TestCase):
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):