Kaydet (Commit) dd441701 authored tarafından Jannis Leidel's avatar Jannis Leidel

Fixed #17717 (again) -- Used the new API for concrete models added in r17573.…

Fixed #17717 (again) -- Used the new API for concrete models added in r17573. Many thanks to Simon Charette and Anssi Kääriäinen.

git-svn-id: http://code.djangoproject.com/svn/django/trunk@17643 bcc190cf-cafb-0310-a4f2-bffc1f526a37
üst 7ce1ad7c
......@@ -43,8 +43,8 @@ class Serializer(object):
self.start_object(obj)
# Use the concrete parent class' _meta instead of the object's _meta
# This is to avoid local_fields problems for proxy models. Refs #17717.
concrete_class = obj._meta.proxy_for_model or obj.__class__
for field in concrete_class._meta.local_fields:
concrete_model = obj._meta.concrete_model
for field in concrete_model._meta.local_fields:
if field.serialize:
if field.rel is None:
if self.selected_fields is None or field.attname in self.selected_fields:
......@@ -52,7 +52,7 @@ class Serializer(object):
else:
if self.selected_fields is None or field.attname[:-3] in self.selected_fields:
self.handle_fk_field(obj, field)
for field in concrete_class._meta.many_to_many:
for field in concrete_model._meta.many_to_many:
if field.serialize:
if self.selected_fields is None or field.attname in self.selected_fields:
self.handle_m2m_field(obj, field)
......
......@@ -263,6 +263,10 @@ class ProxyBaseModel(BaseModel):
class Meta:
proxy = True
class ProxyProxyBaseModel(ProxyBaseModel):
class Meta:
proxy = True
class LengthModel(models.Model):
data = models.IntegerField()
......
......@@ -41,8 +41,8 @@ from .models import (BooleanData, CharData, DateData, DateTimeData, EmailData,
GenericIPAddressPKData, PhonePKData, PositiveIntegerPKData,
PositiveSmallIntegerPKData, SlugPKData, SmallPKData, USStatePKData,
AutoNowDateTimeData, ModifyingSaveData, InheritAbstractModel, BaseModel,
ExplicitInheritBaseModel, InheritBaseModel, ProxyBaseModel, BigIntegerData,
LengthModel, Tag, ComplexModel)
ExplicitInheritBaseModel, InheritBaseModel, ProxyBaseModel,
ProxyProxyBaseModel, BigIntegerData, LengthModel, Tag, ComplexModel)
# A set of functions that can be used to recreate
# test data objects of various kinds.
......@@ -410,11 +410,14 @@ class SerializerTests(TestCase):
def test_serialize_proxy_model(self):
BaseModel.objects.create(parent_data=1)
base_objects = BaseModel.objects.all()
base_objects = BaseModel.objects.all()
proxy_objects = ProxyBaseModel.objects.all()
base_data = serializers.serialize("json", base_objects)
proxy_proxy_objects = ProxyProxyBaseModel.objects.all()
base_data = serializers.serialize("json", base_objects)
proxy_data = serializers.serialize("json", proxy_objects)
proxy_proxy_data = serializers.serialize("json", proxy_proxy_objects)
self.assertEqual(base_data, proxy_data.replace('proxy', ''))
self.assertEqual(base_data, proxy_proxy_data.replace('proxy', ''))
def serializerTest(format, self):
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment