aboutsummaryrefslogtreecommitdiffstats
path: root/rest_framework
diff options
context:
space:
mode:
authorTom Christie2013-04-30 08:24:33 +0100
committerTom Christie2013-04-30 08:24:33 +0100
commit21ae3a66917acf4ea57e8f7940ce1a6823a2ce92 (patch)
treebd4cef8d397b6a51ca2eae044b0f042949c92acc /rest_framework
parent81c3b4f250e389c29bdaa7da07c4860e2175136d (diff)
downloaddjango-rest-framework-21ae3a66917acf4ea57e8f7940ce1a6823a2ce92.tar.bz2
Drop out attribute
Diffstat (limited to 'rest_framework')
-rw-r--r--rest_framework/generics.py24
-rw-r--r--rest_framework/serializers.py4
-rw-r--r--rest_framework/tests/generics.py26
3 files changed, 14 insertions, 40 deletions
diff --git a/rest_framework/generics.py b/rest_framework/generics.py
index 3ea78b5d..62129dcc 100644
--- a/rest_framework/generics.py
+++ b/rest_framework/generics.py
@@ -20,11 +20,17 @@ class GenericAPIView(views.APIView):
"""
# You'll need to either set these attributes,
- # or override `get_queryset`/`get_serializer_class`.
+ # or override `get_queryset()`/`get_serializer_class()`.
queryset = None
serializer_class = None
+ # This shortcut may be used instead of setting either or both
+ # of the `queryset`/`serializer_class` attributes, although using
+ # the explicit style is generally preferred.
+ model = None
+
# If you want to use object lookups other than pk, set this attribute.
+ # For more complex lookup requirements override `get_object()`.
lookup_field = 'pk'
# Pagination settings
@@ -39,15 +45,6 @@ class GenericAPIView(views.APIView):
# Determines if the view will return 200 or 404 responses for empty lists.
allow_empty = True
- # This shortcut may be used instead of setting either (or both)
- # of the `queryset`/`serializer_class` attributes, although using
- # 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
-
# The following attributes may be subject to change,
# and should be considered private API.
model_serializer_class = api_settings.DEFAULT_MODEL_SERIALIZER_CLASS
@@ -193,16 +190,15 @@ class GenericAPIView(views.APIView):
if serializer_class is not None:
return serializer_class
- assert self.model is not None or self.queryset is not None, \
+ assert self.model is not None, \
"'%s' should either include a 'serializer_class' attribute, " \
- "or use the 'queryset' or 'model' attribute as a shortcut for " \
+ "or use the 'model' attribute as a shortcut for " \
"automatically generating a serializer class." \
% self.__class__.__name__
class DefaultSerializer(self.model_serializer_class):
class Meta:
- model = self.model or self.queryset.model
- fields = self.fields
+ model = self.model
return DefaultSerializer
def get_queryset(self):
diff --git a/rest_framework/serializers.py b/rest_framework/serializers.py
index f4a20097..0f943d79 100644
--- a/rest_framework/serializers.py
+++ b/rest_framework/serializers.py
@@ -677,6 +677,8 @@ class ModelSerializer(Serializer):
def get_nested_field(self, model_field, related_model, to_many):
"""
Creates a default instance of a nested relational field.
+
+ Note that model_field will be `None` for reverse relationships.
"""
class NestedModelSerializer(ModelSerializer):
class Meta:
@@ -686,6 +688,8 @@ class ModelSerializer(Serializer):
def get_related_field(self, model_field, related_model, to_many):
"""
Creates a default instance of a flat relational field.
+
+ Note that model_field will be `None` for reverse relationships.
"""
# TODO: filter queryset using:
# .using(db).complex_filter(self.rel.limit_choices_to)
diff --git a/rest_framework/tests/generics.py b/rest_framework/tests/generics.py
index 63ff1fc3..4a13389a 100644
--- a/rest_framework/tests/generics.py
+++ b/rest_framework/tests/generics.py
@@ -344,32 +344,6 @@ 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):
- queryset = BasicModel.objects.all()
- fields = ('text',)
-
- class RegularView(generics.RetrieveUpdateDestroyAPIView):
- queryset = BasicModel.objects.all()
-
- 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'])
- self.assertEqual(Serializer().opts.model, BasicModel)
-
- def test_not_overridden_fields_view(self):
- Serializer = self.regular_view.get_serializer_class()
- self.assertEqual(Serializer().fields.keys(), ['id', 'text'])
- self.assertEqual(Serializer().opts.model, BasicModel)
-
-
# Regression test for #285
class CommentSerializer(serializers.ModelSerializer):