diff --git a/docs/topics/release-notes.md b/docs/topics/release-notes.md index e4bd12171..0e2068099 100644 --- a/docs/topics/release-notes.md +++ b/docs/topics/release-notes.md @@ -21,6 +21,7 @@ Major version numbers (x.0.0) are reserved for project milestones. No major poi * Added `PATCH` support. * Added `RetrieveUpdateAPIView`. * Relation changes are now persisted in `save` instead of in `.restore_object`. +* Bugfix: Fix issue with FileField validation with files=None. ### 2.1.14 diff --git a/rest_framework/fields.py b/rest_framework/fields.py index d8b82e5fb..a022fe092 100644 --- a/rest_framework/fields.py +++ b/rest_framework/fields.py @@ -181,6 +181,7 @@ class WritableField(Field): try: if self._use_files: + files = files or {} native = files[field_name] else: native = data[field_name] diff --git a/rest_framework/tests/files.py b/rest_framework/tests/files.py index 5dd57b7c6..446e23c07 100644 --- a/rest_framework/tests/files.py +++ b/rest_framework/tests/files.py @@ -25,7 +25,6 @@ class UploadedFileSerializer(serializers.Serializer): class FileSerializerTests(TestCase): - def test_create(self): now = datetime.datetime.now() file = StringIO.StringIO('stuff') @@ -37,3 +36,16 @@ class FileSerializerTests(TestCase): self.assertEquals(serializer.object.created, uploaded_file.created) self.assertEquals(serializer.object.file, uploaded_file.file) self.assertFalse(serializer.object is uploaded_file) + + def test_creation_failure(self): + """ + Passing files=None should result in an ValidationError + + Regression test for: + https://github.com/tomchristie/django-rest-framework/issues/542 + """ + now = datetime.datetime.now() + + serializer = UploadedFileSerializer(data={'created': now}) + self.assertFalse(serializer.is_valid()) + self.assertIn('file', serializer.errors)