diff options
| author | Tom Christie | 2013-04-30 08:24:33 +0100 | 
|---|---|---|
| committer | Tom Christie | 2013-04-30 08:24:33 +0100 | 
| commit | 21ae3a66917acf4ea57e8f7940ce1a6823a2ce92 (patch) | |
| tree | bd4cef8d397b6a51ca2eae044b0f042949c92acc /rest_framework | |
| parent | 81c3b4f250e389c29bdaa7da07c4860e2175136d (diff) | |
| download | django-rest-framework-21ae3a66917acf4ea57e8f7940ce1a6823a2ce92.tar.bz2 | |
Drop out  attribute
Diffstat (limited to 'rest_framework')
| -rw-r--r-- | rest_framework/generics.py | 24 | ||||
| -rw-r--r-- | rest_framework/serializers.py | 4 | ||||
| -rw-r--r-- | rest_framework/tests/generics.py | 26 | 
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):  | 
