diff --git a/rest_framework/fields.py b/rest_framework/fields.py index c8f65db0e5..1c1201ceca 100644 --- a/rest_framework/fields.py +++ b/rest_framework/fields.py @@ -7,6 +7,7 @@ import inspect import re import uuid +import warnings from collections import OrderedDict from django.conf import settings @@ -371,12 +372,13 @@ def bind(self, field_name, parent): # 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.source != field_name, ( - "It is redundant to specify `source='%s'` on field '%s' in " - "serializer '%s', because it is the same as the field name. " - "Remove the `source` keyword argument." % - (field_name, self.__class__.__name__, parent.__class__.__name__) - ) + if field_name == self.source: + warnings.warn( + "It is redundant to specify `source='%s'` on field '%s' in " + "serializer '%s', because it is the same as the field name. " + "Remove the `source` keyword argument." % + (field_name, self.__class__.__name__, parent.__class__.__name__), + ) self.field_name = field_name self.parent = parent diff --git a/rest_framework/relations.py b/rest_framework/relations.py index 31c1e75618..ebc0f12dea 100644 --- a/rest_framework/relations.py +++ b/rest_framework/relations.py @@ -2,6 +2,7 @@ from __future__ import unicode_literals import sys +import warnings from collections import OrderedDict from django.core.exceptions import ImproperlyConfigured, ObjectDoesNotExist @@ -115,10 +116,11 @@ def __init__(self, **kwargs): 'Relational field must provide a `queryset` argument, ' 'override `get_queryset`, or set read_only=`True`.' ) - assert not (self.queryset is not None and kwargs.get('read_only', None)), ( - 'Relational fields should not provide a `queryset` argument, ' - 'when setting read_only=`True`.' - ) + if self.queryset is not None and kwargs.get('read_only'): + warnings.warn( + 'Relational fields should not provide a `queryset` argument, ' + 'when setting read_only=`True`.' + ) kwargs.pop('many', None) kwargs.pop('allow_empty', None) super(RelatedField, self).__init__(**kwargs) diff --git a/tests/test_fields.py b/tests/test_fields.py index 12c936b229..a1b2a3edc8 100644 --- a/tests/test_fields.py +++ b/tests/test_fields.py @@ -180,9 +180,10 @@ class ExampleSerializer(serializers.Serializer): def test_redundant_source(self): class ExampleSerializer(serializers.Serializer): example_field = serializers.CharField(source='example_field') - with pytest.raises(AssertionError) as exc_info: + with pytest.warns(UserWarning) as record: ExampleSerializer().fields - assert str(exc_info.value) == ( + assert len(record) == 1 + assert record[0].message.args[0] == ( "It is redundant to specify `source='example_field'` on field " "'CharField' in serializer 'ExampleSerializer', because it is the " "same as the field name. Remove the `source` keyword argument."