From b8d5d94625f3238c77b81a76a2d6857671614178 Mon Sep 17 00:00:00 2001 From: Mark Jones Date: Fri, 19 Dec 2014 10:10:08 -0600 Subject: [PATCH] Don't try to iterate Nonetype objects when serializing Added test for serializing None in a many=True situation. --- rest_framework/serializers.py | 5 ++++- tests/test_serializer_empty.py | 13 +++++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/rest_framework/serializers.py b/rest_framework/serializers.py index 7d85894f6..40125a295 100644 --- a/rest_framework/serializers.py +++ b/rest_framework/serializers.py @@ -571,7 +571,10 @@ class BaseSerializer(WritableField): DeprecationWarning, stacklevel=2) if many: - self._data = [self.to_native(item) for item in obj] + if hasattr(obj, '__iter__'): + self._data = [self.to_native(item) for item in obj] + else: + self._data = [] else: self._data = self.to_native(obj) diff --git a/tests/test_serializer_empty.py b/tests/test_serializer_empty.py index 30cff3615..454a228a8 100644 --- a/tests/test_serializer_empty.py +++ b/tests/test_serializer_empty.py @@ -13,3 +13,16 @@ class EmptySerializerTestCase(TestCase): serializer = FooBarSerializer() self.assertEquals(serializer.data, {'foo': 0}) + + def test_serializing_none(self): + class FooBarSerializer(serializers.Serializer): + foo = serializers.IntegerField() + bar = serializers.SerializerMethodField('get_bar') + + def get_bar(self, obj): + return 'bar' + + serializer = FooBarSerializer(None, many=True) + self.assertEquals(serializer.data, []) + +