Author: SmileyChris
Date: 2011-04-22 14:18:27 -0700 (Fri, 22 Apr 2011)
New Revision: 16090

Modified:
   django/trunk/django/forms/fields.py
   django/trunk/docs/ref/forms/fields.txt
   django/trunk/tests/regressiontests/forms/tests/fields.py
Log:
Fixed #13584 -- Optionally allow empty files with django.forms.FileField. 
Thanks for the patch erickr and closedbracket.

Modified: django/trunk/django/forms/fields.py
===================================================================
--- django/trunk/django/forms/fields.py 2011-04-22 21:05:29 UTC (rev 16089)
+++ django/trunk/django/forms/fields.py 2011-04-22 21:18:27 UTC (rev 16090)
@@ -450,6 +450,7 @@
 
     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 @@
             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

Modified: django/trunk/docs/ref/forms/fields.txt
===================================================================
--- django/trunk/docs/ref/forms/fields.txt      2011-04-22 21:05:29 UTC (rev 
16089)
+++ django/trunk/docs/ref/forms/fields.txt      2011-04-22 21:18:27 UTC (rev 
16090)
@@ -503,10 +503,15 @@
     * 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>`.
 

Modified: django/trunk/tests/regressiontests/forms/tests/fields.py
===================================================================
--- django/trunk/tests/regressiontests/forms/tests/fields.py    2011-04-22 
21:05:29 UTC (rev 16089)
+++ django/trunk/tests/regressiontests/forms/tests/fields.py    2011-04-22 
21:18:27 UTC (rev 16090)
@@ -506,6 +506,11 @@
         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):

-- 
You received this message because you are subscribed to the Google Groups 
"Django updates" group.
To post to this group, send email to django-updates@googlegroups.com.
To unsubscribe from this group, send email to 
django-updates+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/django-updates?hl=en.

Reply via email to