diff --git a/rest_framework/fields.py b/rest_framework/fields.py index f46edef1ec..17e9b48d99 100644 --- a/rest_framework/fields.py +++ b/rest_framework/fields.py @@ -8,6 +8,7 @@ import json import re import uuid +import warnings from collections import OrderedDict from django.conf import settings @@ -362,12 +363,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 eac9647b00..569630b048 100644 --- a/rest_framework/relations.py +++ b/rest_framework/relations.py @@ -1,6 +1,7 @@ # coding: utf-8 from __future__ import unicode_literals +import warnings from collections import OrderedDict from django.core.exceptions import ImproperlyConfigured, ObjectDoesNotExist @@ -97,10 +98,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 16221d4cca..b6d39da7aa 100644 --- a/tests/test_fields.py +++ b/tests/test_fields.py @@ -177,9 +177,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."