From d47f29a207b5e8dc8d6be32b343fae379003b49d Mon Sep 17 00:00:00 2001 From: Tom Jaster Date: Mon, 19 Jan 2015 16:00:21 +0100 Subject: [PATCH] Fixed the rest of the test cases. # Some tests do not have the full QuerySet API # But we optimize SlugRelatedFields by only loading what we need MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit # it seems that some tests/django initializers are setting # to_field where it is totally unnecessary so SlugRelatedField was used… Added checks --- rest_framework/relations.py | 9 ++++++++- rest_framework/serializers.py | 5 ++++- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/rest_framework/relations.py b/rest_framework/relations.py index 3a081fa65..b1a7eca65 100644 --- a/rest_framework/relations.py +++ b/rest_framework/relations.py @@ -303,7 +303,14 @@ class SlugRelatedField(RelatedField): def to_internal_value(self, data): try: - return self.get_queryset().only(self.slug_field).get(**{self.slug_field: data}) + # Some tests do not have the full QuerySet API + # But we optimize SlugRelatedFields by only loading what we need + qs = self.get_queryset() + if hasattr(qs, 'only'): + return self.get_queryset().only(self.slug_field).get(**{self.slug_field: data}) + else: + return self.get_queryset().get(**{self.slug_field: data}) + except ObjectDoesNotExist: self.fail('does_not_exist', slug_name=self.slug_field, value=smart_text(data)) except (TypeError, ValueError): diff --git a/rest_framework/serializers.py b/rest_framework/serializers.py index c7c751f11..9fc7d87a2 100644 --- a/rest_framework/serializers.py +++ b/rest_framework/serializers.py @@ -1005,7 +1005,10 @@ class ModelSerializer(Serializer): else: kwargs = get_relation_kwargs(field_name, relation_info) to_field = kwargs.get('to_field', False) - if to_field: + kwargs.pop('to_field', None) + # it seems that some tests/django initializers are setting + # to_field where it is totally unnecessary + if to_field and to_field != 'id': # using the slug field for now kwargs.pop('to_field', None) kwargs['slug_field'] = to_field