diff options
| author | Tom Christie | 2013-12-10 00:54:11 -0800 |
|---|---|---|
| committer | Tom Christie | 2013-12-10 00:54:11 -0800 |
| commit | 462c5e3d0defaceaf4b5b946d4a9f761a56b701a (patch) | |
| tree | 7e832b33e2fec9fb92fee1323b869280227d0623 | |
| parent | 785a42cd5aee9e96f9b780ff144fa13c16189748 (diff) | |
| parent | c09ad1bedc8559b2e6eadf0e5b8f3732af2d9d29 (diff) | |
| download | django-rest-framework-462c5e3d0defaceaf4b5b946d4a9f761a56b701a.tar.bz2 | |
Merge pull request #1280 from tomchristie/fix-1205
Refine model manager behavior so as not to use the behavior in incorrect...
| -rw-r--r-- | docs/topics/release-notes.md | 1 | ||||
| -rw-r--r-- | rest_framework/serializers.py | 8 |
2 files changed, 8 insertions, 1 deletions
diff --git a/docs/topics/release-notes.md b/docs/topics/release-notes.md index d3f85e6e..1ddd8351 100644 --- a/docs/topics/release-notes.md +++ b/docs/topics/release-notes.md @@ -43,6 +43,7 @@ You can determine your currently installed version using `pip freeze`: ### Master * JSON renderer now deals with objects that implement a dict-like interface. +* Bugfix: Refine behavior that calls model manager `all()` across nested serializer relationships, preventing erronous behavior with some non-ORM objects, and preventing unneccessary queryset re-evaluations. ### 2.3.10 diff --git a/rest_framework/serializers.py b/rest_framework/serializers.py index 44e4b04b..0d35fb32 100644 --- a/rest_framework/serializers.py +++ b/rest_framework/serializers.py @@ -412,7 +412,13 @@ class BaseSerializer(WritableField): # Set the serializer object if it exists obj = get_component(self.parent.object, self.source or field_name) if self.parent.object else None - obj = obj.all() if is_simple_callable(getattr(obj, 'all', None)) else obj + + # If we have a model manager or similar object then we need + # to iterate through each instance. + if (self.many and + not hasattr(obj, '__iter__') and + is_simple_callable(getattr(obj, 'all', None))): + obj = obj.all() if self.source == '*': if value: |
