From 07cb610461c8139508dbbe7f8d06244124442823 Mon Sep 17 00:00:00 2001 From: David Henderson Date: Mon, 10 Dec 2012 18:46:05 +0000 Subject: [PATCH 1/3] Make the kwargs from the url available in the request --- rest_framework/request.py | 3 ++- rest_framework/views.py | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/rest_framework/request.py b/rest_framework/request.py index 39c643219..a3ea5acd4 100644 --- a/rest_framework/request.py +++ b/rest_framework/request.py @@ -75,12 +75,13 @@ class Request(object): _CONTENTTYPE_PARAM = api_settings.FORM_CONTENTTYPE_OVERRIDE def __init__(self, request, parsers=None, authenticators=None, - negotiator=None, parser_context=None): + negotiator=None, parser_context=None, kargs = {}): self._request = request self.parsers = parsers or () self.authenticators = authenticators or () self.negotiator = negotiator or self._default_negotiator() self.parser_context = parser_context + self.kwargs = kargs self._data = Empty self._files = Empty self._method = Empty diff --git a/rest_framework/views.py b/rest_framework/views.py index 10bdd5a53..e987bc0f1 100644 --- a/rest_framework/views.py +++ b/rest_framework/views.py @@ -275,7 +275,7 @@ class APIView(View): parsers=self.get_parsers(), authenticators=self.get_authenticators(), negotiator=self.get_content_negotiator(), - parser_context=parser_context) + parser_context=parser_context, kargs=kargs) def initial(self, request, *args, **kwargs): """ From 5a1df32035a9c082a375c2916e4fd99fbe2e3236 Mon Sep 17 00:00:00 2001 From: David Henderson Date: Mon, 10 Dec 2012 18:46:05 +0000 Subject: [PATCH 2/3] Don't attempt to convert dictionary keys --- 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 caa7c980f..acda833f0 100644 --- a/rest_framework/serializers.py +++ b/rest_framework/serializers.py @@ -283,7 +283,7 @@ class BaseSerializer(Field): """ Serialize objects -> primitives. """ - if hasattr(obj, '__iter__'): + if hasattr(obj, '__iter__') and not hasattr(obj, '__dict__'): return [self.convert_object(item) for item in obj] return self.convert_object(obj) From 20fa48ec98b579f75c035b09e67147b7d9c4cb6d Mon Sep 17 00:00:00 2001 From: David Henderson Date: Fri, 14 Dec 2012 10:01:42 +0000 Subject: [PATCH 3/3] Fixed failing test --- 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 acda833f0..83640254a 100644 --- a/rest_framework/serializers.py +++ b/rest_framework/serializers.py @@ -3,6 +3,7 @@ import datetime import types from decimal import Decimal from django.db import models +from django.db.models.query import QuerySet from django.forms import widgets from django.utils.datastructures import SortedDict from rest_framework.compat import get_concrete_model @@ -283,7 +284,7 @@ class BaseSerializer(Field): """ Serialize objects -> primitives. """ - if hasattr(obj, '__iter__') and not hasattr(obj, '__dict__'): + if hasattr(obj, '__iter__') and (isinstance(obj, QuerySet) or not hasattr(obj, '__dict__')): return [self.convert_object(item) for item in obj] return self.convert_object(obj)