mirror of https://github.com/django/django.git
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
This commit is contained in:
parent
7ce1ad7c03
commit
dd441701ce
|
@ -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):
|
||||
|
|
Loading…
Reference in New Issue