From 130b83623e346db5148bab98dd5787a893e40e18 Mon Sep 17 00:00:00 2001 From: Rob Golding Date: Sun, 28 Jan 2018 21:02:03 +0000 Subject: [PATCH] Fix `TypeError` bug in `ListSerializer.to_representation` The `iterable` can potentially be a subclass of `BaseManager` (and not necessarily `Manager`), which leads to a `TypeError` as the `isinstance` check fails (so a queryset is not obtained before iteration is attempted). --- rest_framework/serializers.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/rest_framework/serializers.py b/rest_framework/serializers.py index 33da0bad0..b28c06586 100644 --- a/rest_framework/serializers.py +++ b/rest_framework/serializers.py @@ -20,7 +20,7 @@ from collections import Mapping, OrderedDict from django.core.exceptions import ValidationError as DjangoValidationError from django.core.exceptions import ImproperlyConfigured from django.db import models -from django.db.models import DurationField as ModelDurationField +from django.db.models import manager, DurationField as ModelDurationField from django.db.models.fields import Field as DjangoModelField from django.db.models.fields import FieldDoesNotExist from django.utils import six, timezone @@ -654,7 +654,7 @@ class ListSerializer(BaseSerializer): """ # 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 + iterable = data.all() if isinstance(data, manager.BaseManager) else data return [ self.child.to_representation(item) for item in iterable