diff --git a/rest_framework/compat.py b/rest_framework/compat.py index 653f3b65e..d059d1939 100644 --- a/rest_framework/compat.py +++ b/rest_framework/compat.py @@ -78,19 +78,6 @@ def distinct(queryset, base): return queryset.distinct() -# TODO: Remove -# field.rel is deprecated from 1.9 onwards -def get_remote_field(field, **kwargs): - if 'default' in kwargs: - if django.VERSION < (1, 9): - return getattr(field, 'rel', kwargs['default']) - return getattr(field, 'remote_field', kwargs['default']) - - if django.VERSION < (1, 9): - return field.rel - return field.remote_field - - def _resolve_model(obj): """ Resolve supplied `obj` to a Django model class. diff --git a/rest_framework/fields.py b/rest_framework/fields.py index 8fae159ab..813b75416 100644 --- a/rest_framework/fields.py +++ b/rest_framework/fields.py @@ -32,7 +32,7 @@ from django.utils.translation import ugettext_lazy as _ from rest_framework import ISO_8601 from rest_framework.compat import ( InvalidTimeError, MaxLengthValidator, MaxValueValidator, - MinLengthValidator, MinValueValidator, get_remote_field, unicode_repr, + MinLengthValidator, MinValueValidator, unicode_repr, unicode_to_repr ) from rest_framework.exceptions import ErrorDetail, ValidationError @@ -1829,7 +1829,7 @@ class ModelField(Field): MaxLengthValidator(self.max_length, message=message)) def to_internal_value(self, data): - rel = get_remote_field(self.model_field, default=None) + rel = self.model_field.remote_field if rel is not None: return rel.model._meta.get_field(rel.field_name).to_python(data) return self.model_field.to_python(data) diff --git a/rest_framework/utils/model_meta.py b/rest_framework/utils/model_meta.py index 4f47c2c36..75baa9c7f 100644 --- a/rest_framework/utils/model_meta.py +++ b/rest_framework/utils/model_meta.py @@ -7,7 +7,6 @@ Usage: `get_field_info(model)` returns a `FieldInfo` instance. """ from collections import OrderedDict, namedtuple -from rest_framework.compat import get_remote_field FieldInfo = namedtuple('FieldResult', [ 'pk', # Model field instance @@ -49,19 +48,19 @@ def get_field_info(model): def _get_pk(opts): pk = opts.pk - rel = get_remote_field(pk) + rel = pk.remote_field while rel and rel.parent_link: # If model is a child via multi-table inheritance, use parent's pk. pk = pk.remote_field.model._meta.pk - rel = get_remote_field(pk) + rel = pk.remote_field return pk def _get_fields(opts): fields = OrderedDict() - for field in [field for field in opts.fields if field.serialize and not get_remote_field(field)]: + for field in [field for field in opts.fields if field.serialize and not field.remote_field]: fields[field.name] = field return fields @@ -76,7 +75,7 @@ def _get_forward_relationships(opts): Returns an `OrderedDict` of field names to `RelationInfo`. """ forward_relations = OrderedDict() - for field in [field for field in opts.fields if field.serialize and get_remote_field(field)]: + for field in [field for field in opts.fields if field.serialize and field.remote_field]: forward_relations[field.name] = RelationInfo( model_field=field, related_model=field.remote_field.model, @@ -95,7 +94,7 @@ def _get_forward_relationships(opts): # manytomany do not have to_fields to_field=None, has_through_model=( - not get_remote_field(field).through._meta.auto_created + not field.remote_field.through._meta.auto_created ), reverse=False ) @@ -119,7 +118,7 @@ def _get_reverse_relationships(opts): reverse_relations[accessor_name] = RelationInfo( model_field=None, related_model=related, - to_many=get_remote_field(relation.field).multiple, + to_many=relation.field.remote_field.multiple, to_field=_get_to_field(relation.field), has_through_model=False, reverse=True @@ -137,8 +136,8 @@ def _get_reverse_relationships(opts): # manytomany do not have to_fields to_field=None, has_through_model=( - (getattr(get_remote_field(relation.field), 'through', None) is not None) and - not get_remote_field(relation.field).through._meta.auto_created + (getattr(relation.field.remote_field, 'through', None) is not None) and + not relation.field.remote_field.through._meta.auto_created ), reverse=True ) diff --git a/tests/test_compat.py b/tests/test_compat.py index 4c1a5e94d..aa1107617 100644 --- a/tests/test_compat.py +++ b/tests/test_compat.py @@ -22,20 +22,6 @@ class CompatTests(TestCase): expected = (timedelta.days * 86400.0) + float(timedelta.seconds) + (timedelta.microseconds / 1000000.0) assert compat.total_seconds(timedelta) == expected - def test_get_remote_field_with_old_django_version(self): - class MockField(object): - rel = 'example_rel' - compat.django.VERSION = (1, 8) - assert compat.get_remote_field(MockField(), default='default_value') == 'example_rel' - assert compat.get_remote_field(object(), default='default_value') == 'default_value' - - def test_get_remote_field_with_new_django_version(self): - class MockField(object): - remote_field = 'example_remote_field' - compat.django.VERSION = (1, 10) - assert compat.get_remote_field(MockField(), default='default_value') == 'example_remote_field' - assert compat.get_remote_field(object(), default='default_value') == 'default_value' - def test_set_rollback_for_transaction_in_managed_mode(self): class MockTransaction(object): called_rollback = False