From 4ebd701be74fbb1f44f7763f7ab9e19f6483ac96 Mon Sep 17 00:00:00 2001 From: Tom Christie Date: Fri, 28 Sep 2012 14:53:22 +0100 Subject: Fix serialization issue with Django 1.3 --- rest_framework/compat.py | 8 ++++++++ rest_framework/serializers.py | 3 ++- tox.ini | 8 ++++---- 3 files changed, 14 insertions(+), 5 deletions(-) diff --git a/rest_framework/compat.py b/rest_framework/compat.py index 5fc6c686..7664c400 100644 --- a/rest_framework/compat.py +++ b/rest_framework/compat.py @@ -10,6 +10,14 @@ except ImportError: import StringIO +def get_concrete_model(model_cls): + try: + return model_cls._meta.concrete_model + except AttributeError: + # 1.3 does not include concrete model + return model_cls + + # First implementation of Django class-based views did not include head method # in base View class - https://code.djangoproject.com/ticket/15668 if django.VERSION >= (1, 4): diff --git a/rest_framework/serializers.py b/rest_framework/serializers.py index 986d4225..bdb0f10a 100644 --- a/rest_framework/serializers.py +++ b/rest_framework/serializers.py @@ -4,6 +4,7 @@ import types from decimal import Decimal from django.core.serializers.base import DeserializedObject from django.utils.datastructures import SortedDict +from rest_framework.compat import get_concrete_model from rest_framework.fields import * @@ -299,7 +300,7 @@ class ModelSerializer(RelatedField, Serializer): else: cls = self.opts.model - opts = cls._meta.concrete_model._meta + opts = get_concrete_model(cls)._meta pk_field = opts.pk while pk_field.rel: pk_field = pk_field.rel.to._meta.pk diff --git a/tox.ini b/tox.ini index f9bd0990..bcfff672 100644 --- a/tox.ini +++ b/tox.ini @@ -11,11 +11,11 @@ deps = https://github.com/django/django/zipball/master [testenv:py2.7-django1.4] basepython = python2.7 -deps = django>=1.4.1 +deps = django==1.4.1 [testenv:py2.7-django1.3] basepython = python2.7 -deps = django>=1.3.2 +deps = django==1.3.3 [testenv:py2.6-django1.5] basepython = python2.6 @@ -23,8 +23,8 @@ deps = https://github.com/django/django/zipball/master [testenv:py2.6-django1.4] basepython = python2.6 -deps = django>=1.4.1 +deps = django==1.4.1 [testenv:py2.6-django1.3] basepython = python2.6 -deps = django>=1.3.2 +deps = django==1.3.3 -- cgit v1.2.3