Enforce field_name != source

This commit is contained in:
Tom Christie 2014-09-24 20:53:37 +01:00
parent 127c0bd3d6
commit fb1546ee50
2 changed files with 23 additions and 1 deletions

View File

@ -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

View File

@ -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.
# ----------------------------------------