diff options
| author | Tom Christie | 2014-09-24 20:53:37 +0100 | 
|---|---|---|
| committer | Tom Christie | 2014-09-24 20:53:37 +0100 | 
| commit | fb1546ee50953faae8af505a0c90da00ac08ad92 (patch) | |
| tree | 8840488b273557672cba6f403f37b4f2d0630697 | |
| parent | 127c0bd3d68860dd6567d81047257fbc3e70b4b9 (diff) | |
| download | django-rest-framework-fb1546ee50953faae8af505a0c90da00ac08ad92.tar.bz2 | |
Enforce field_name != source
| -rw-r--r-- | rest_framework/fields.py | 11 | ||||
| -rw-r--r-- | tests/test_fields.py | 13 | 
2 files changed, 23 insertions, 1 deletions
| diff --git a/rest_framework/fields.py b/rest_framework/fields.py index 1f7d964a..9280ea3a 100644 --- a/rest_framework/fields.py +++ b/rest_framework/fields.py @@ -160,6 +160,17 @@ class Field(object):          """          Setup the context for the field instance.          """ + +        # In order to enforce a consistent style, we error if a redundant +        # 'source' argument has been used. For example: +        # my_field = serializer.CharField(source='my_field') +        assert self._kwargs.get('source') != field_name, ( +            "It is redundant to specify `source='%s'` on field '%s' in " +            "serializer '%s', as it is the same the field name. " +            "Remove the `source` keyword argument." % +            (field_name, self.__class__.__name__, parent.__class__.__name__) +        ) +          self.field_name = field_name          self.parent = parent          self.root = root diff --git a/tests/test_fields.py b/tests/test_fields.py index 91f3f5db..c2e03023 100644 --- a/tests/test_fields.py +++ b/tests/test_fields.py @@ -1,6 +1,6 @@  from decimal import Decimal  from django.utils import timezone -from rest_framework import fields +from rest_framework import fields, serializers  import datetime  import django  import pytest @@ -69,6 +69,17 @@ class TestFieldOptions:          output = field.run_validation()          assert output is 123 +    def test_redundant_source(self): +        class ExampleSerializer(serializers.Serializer): +            example_field = serializers.CharField(source='example_field') +        with pytest.raises(AssertionError) as exc_info: +            ExampleSerializer() +        assert str(exc_info.value) == ( +            "It is redundant to specify `source='example_field'` on field " +            "'CharField' in serializer 'ExampleSerializer', as it is the " +            "same the field name. Remove the `source` keyword argument." +        ) +  # Tests for field input and output values.  # ---------------------------------------- | 
