aboutsummaryrefslogtreecommitdiffstats
path: root/rest_framework
diff options
context:
space:
mode:
authorTom Christie2013-04-29 13:20:15 +0100
committerTom Christie2013-04-29 13:20:15 +0100
commit53f9d4a380ee0066cbee8382ae265ea6005d8c88 (patch)
treeb209933584df66f8093a665921fb65b90726eed1 /rest_framework
parentd17e2d852fc6ebc738e324b8797d390dc0287d37 (diff)
downloaddjango-rest-framework-53f9d4a380ee0066cbee8382ae265ea6005d8c88.tar.bz2
fields shortcut on views
Diffstat (limited to 'rest_framework')
-rw-r--r--rest_framework/generics.py5
-rw-r--r--rest_framework/serializers.py2
-rw-r--r--rest_framework/tests/generics.py24
3 files changed, 30 insertions, 1 deletions
diff --git a/rest_framework/generics.py b/rest_framework/generics.py
index 972424e6..0b8e4a15 100644
--- a/rest_framework/generics.py
+++ b/rest_framework/generics.py
@@ -44,6 +44,10 @@ class GenericAPIView(views.APIView):
# the explicit style is generally preferred.
model = None
+ # This shortcut may be used instead of setting the `serializer_class`
+ # attribute, although using the explicit style is generally preferred.
+ fields = None
+
# If the `model` shortcut is used instead of `serializer_class`, then the
# serializer class will be constructed using this class as the base.
model_serializer_class = api_settings.DEFAULT_MODEL_SERIALIZER_CLASS
@@ -193,6 +197,7 @@ class GenericAPIView(views.APIView):
class DefaultSerializer(self.model_serializer_class):
class Meta:
model = self.model
+ fields = self.fields
return DefaultSerializer
def get_queryset(self):
diff --git a/rest_framework/serializers.py b/rest_framework/serializers.py
index 3afb7475..f4a20097 100644
--- a/rest_framework/serializers.py
+++ b/rest_framework/serializers.py
@@ -645,7 +645,7 @@ class ModelSerializer(Serializer):
for relation in reverse_rels:
accessor_name = relation.get_accessor_name()
- if accessor_name not in self.opts.fields:
+ if not self.opts.fields or accessor_name not in self.opts.fields:
continue
related_model = relation.model
to_many = relation.field.rel.multiple
diff --git a/rest_framework/tests/generics.py b/rest_framework/tests/generics.py
index 4a13389a..12c9b677 100644
--- a/rest_framework/tests/generics.py
+++ b/rest_framework/tests/generics.py
@@ -344,6 +344,30 @@ class TestOverriddenGetObject(TestCase):
self.assertEqual(response.data, self.data[0])
+class TestFieldsShortcut(TestCase):
+ """
+ Test cases for setting the `fields` attribute on a view.
+ """
+ def setUp(self):
+ class OverriddenFieldsView(generics.RetrieveUpdateDestroyAPIView):
+ model = BasicModel
+ fields = ('text',)
+
+ class RegularView(generics.RetrieveUpdateDestroyAPIView):
+ model = BasicModel
+
+ self.overridden_fields_view = OverriddenFieldsView()
+ self.regular_view = RegularView()
+
+ def test_overridden_fields_view(self):
+ Serializer = self.overridden_fields_view.get_serializer_class()
+ self.assertEqual(Serializer().fields.keys(), ['text'])
+
+ def test_not_overridden_fields_view(self):
+ Serializer = self.regular_view.get_serializer_class()
+ self.assertEqual(Serializer().fields.keys(), ['id', 'text'])
+
+
# Regression test for #285
class CommentSerializer(serializers.ModelSerializer):