From 3e8f1c9b3a80a85308a8f41fe76941fac4168eb5 Mon Sep 17 00:00:00 2001 From: auvipy Date: Thu, 21 Apr 2016 00:19:30 +0600 Subject: [PATCH 1/2] added get_remote_field compat function --- rest_framework/compat.py | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/rest_framework/compat.py b/rest_framework/compat.py index e435618a2..fd5890554 100644 --- a/rest_framework/compat.py +++ b/rest_framework/compat.py @@ -185,3 +185,18 @@ def template_render(template, context=None, request=None): # backends template, e.g. django.template.backends.django.Template else: return template.render(context, request=request) + +def get_remote_field(field): + """ + Django 1.9 removed usage of Rel objects, see + https://github.com/django/django/pull/4241 + + :param field: Field + :return: remote field + """ + from django.db.models import fields + + if django.VERSION < (1, 9): + return field.rel + else: + return field.remote_field \ No newline at end of file From d3a30d40b3d2f4e280340fa1c7497358a6bcac99 Mon Sep 17 00:00:00 2001 From: auvipy Date: Thu, 21 Apr 2016 00:44:33 +0600 Subject: [PATCH 2/2] converted get_pk to use remote field --- rest_framework/utils/model_meta.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/rest_framework/utils/model_meta.py b/rest_framework/utils/model_meta.py index c3424a679..8859cb59c 100644 --- a/rest_framework/utils/model_meta.py +++ b/rest_framework/utils/model_meta.py @@ -12,6 +12,7 @@ from django.apps import apps from django.core.exceptions import ImproperlyConfigured from django.db import models from django.utils import six +from rest_framework.compat import get_remote_field FieldInfo = namedtuple('FieldResult', [ 'pk', # Model field instance @@ -76,9 +77,10 @@ def get_field_info(model): def _get_pk(opts): pk = opts.pk - while pk.rel and pk.rel.parent_link: + remote_field = get_remote_field(pk) + while remote_field and remote_field.parent_link: # If model is a child via multi-table inheritance, use parent's pk. - pk = pk.rel.to._meta.pk + pk = remote_field.to._meta.pk return pk