aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTom Christie2014-09-24 20:53:37 +0100
committerTom Christie2014-09-24 20:53:37 +0100
commitfb1546ee50953faae8af505a0c90da00ac08ad92 (patch)
tree8840488b273557672cba6f403f37b4f2d0630697
parent127c0bd3d68860dd6567d81047257fbc3e70b4b9 (diff)
downloaddjango-rest-framework-fb1546ee50953faae8af505a0c90da00ac08ad92.tar.bz2
Enforce field_name != source
-rw-r--r--rest_framework/fields.py11
-rw-r--r--tests/test_fields.py13
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.
# ----------------------------------------