From 8d6b0b1f2d3a5014d43f1314d96bc9197709b542 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julio=20Iv=C3=A1n=20Alegre?= Date: Tue, 9 Dec 2014 16:13:18 +0100 Subject: [PATCH 1/4] Update serializers.py Treat the input queryset as it comes (maybe it has been changed in a higher level). Evaluating .all() does nothing if or if not is a queryset. --- rest_framework/serializers.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/rest_framework/serializers.py b/rest_framework/serializers.py index b0c0efa7c..5c73c5f25 100644 --- a/rest_framework/serializers.py +++ b/rest_framework/serializers.py @@ -517,9 +517,8 @@ class ListSerializer(BaseSerializer): """ List of object instances -> List of dicts of primitive datatypes. """ - iterable = data.all() if (hasattr(data, 'all')) else data return [ - self.child.to_representation(item) for item in iterable + self.child.to_representation(item) for item in data ] def validate(self, attrs): From 59470667db1b95eef63ff4308c1b41561438bb8e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=2E=20Iv=C3=A1n=20Alegre?= Date: Tue, 9 Dec 2014 17:49:07 +0100 Subject: [PATCH 2/4] Take in care that input data in serializer can be a Manager --- rest_framework/serializers.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/rest_framework/serializers.py b/rest_framework/serializers.py index 5c73c5f25..9857995ae 100644 --- a/rest_framework/serializers.py +++ b/rest_framework/serializers.py @@ -517,8 +517,9 @@ class ListSerializer(BaseSerializer): """ List of object instances -> List of dicts of primitive datatypes. """ + iterable = data.all() if (isinstance(data, models.Manager) and hasattr(data, 'all')) else data return [ - self.child.to_representation(item) for item in data + self.child.to_representation(item) for item in iterable ] def validate(self, attrs): From 9161e5a9276b185375e9ab7ec188112f6fe49cf0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=2E=20Iv=C3=A1n=20Alegre?= Date: Wed, 10 Dec 2014 09:19:27 +0100 Subject: [PATCH 3/4] Remove unnecessary hasattr all and add comment for nested relationships --- rest_framework/serializers.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/rest_framework/serializers.py b/rest_framework/serializers.py index 9857995ae..e17112592 100644 --- a/rest_framework/serializers.py +++ b/rest_framework/serializers.py @@ -517,7 +517,9 @@ class ListSerializer(BaseSerializer): """ List of object instances -> List of dicts of primitive datatypes. """ - iterable = data.all() if (isinstance(data, models.Manager) and hasattr(data, 'all')) else data + # Dealing with nested relationships, data can be a Manager, + # so, first get a queryset from the Manager if needed + iterable = data.all() if isinstance(data, models.Manager) else data return [ self.child.to_representation(item) for item in iterable ] From 428630c19702172beba94a3381d91340aa5e3bd6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=2E=20Iv=C3=A1n=20Alegre?= Date: Wed, 10 Dec 2014 10:13:15 +0100 Subject: [PATCH 4/4] Fix trailing space --- rest_framework/serializers.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rest_framework/serializers.py b/rest_framework/serializers.py index e17112592..9226895e0 100644 --- a/rest_framework/serializers.py +++ b/rest_framework/serializers.py @@ -517,7 +517,7 @@ class ListSerializer(BaseSerializer): """ List of object instances -> List of dicts of primitive datatypes. """ - # Dealing with nested relationships, data can be a Manager, + # Dealing with nested relationships, data can be a Manager, # so, first get a queryset from the Manager if needed iterable = data.all() if isinstance(data, models.Manager) else data return [