@@ -245,18 +245,18 @@ def get_validators(self):
245
245
246
246
def get_initial (self ):
247
247
if self ._initial_data is not None :
248
- return ReturnDict ([
248
+ return OrderedDict ([
249
249
(field_name , field .get_value (self ._initial_data ))
250
250
for field_name , field in self .fields .items ()
251
251
if field .get_value (self ._initial_data ) is not empty
252
252
and not field .read_only
253
- ], serializer = self )
253
+ ])
254
254
255
- return ReturnDict ([
255
+ return OrderedDict ([
256
256
(field .field_name , field .get_initial ())
257
257
for field in self .fields .values ()
258
258
if not field .read_only
259
- ], serializer = self )
259
+ ])
260
260
261
261
def get_value (self , dictionary ):
262
262
# We override the default field access in order to support
@@ -319,8 +319,8 @@ def to_internal_value(self, data):
319
319
"""
320
320
Dict of native values <- Dict of primitive datatypes.
321
321
"""
322
- ret = {}
323
- errors = ReturnDict ( serializer = self )
322
+ ret = OrderedDict ()
323
+ errors = OrderedDict ( )
324
324
fields = [
325
325
field for field in self .fields .values ()
326
326
if (not field .read_only ) or (field .default is not empty )
@@ -349,7 +349,7 @@ def to_representation(self, instance):
349
349
"""
350
350
Object instance -> Dict of primitive datatypes.
351
351
"""
352
- ret = ReturnDict ( serializer = self )
352
+ ret = OrderedDict ( )
353
353
fields = [field for field in self .fields .values () if not field .write_only ]
354
354
355
355
for field in fields :
@@ -388,6 +388,19 @@ def __getitem__(self, key):
388
388
return NestedBoundField (field , value , error )
389
389
return BoundField (field , value , error )
390
390
391
+ # Include a backlink to the serializer class on return objects.
392
+ # Allows renderers such as HTMLFormRenderer to get the full field info.
393
+
394
+ @property
395
+ def data (self ):
396
+ ret = super (Serializer , self ).data
397
+ return ReturnDict (ret , serializer = self )
398
+
399
+ @property
400
+ def errors (self ):
401
+ ret = super (Serializer , self ).errors
402
+ return ReturnDict (ret , serializer = self )
403
+
391
404
392
405
# There's some replication of `ListField` here,
393
406
# but that's probably better than obfuscating the call hierarchy.
@@ -410,7 +423,7 @@ def __init__(self, *args, **kwargs):
410
423
def get_initial (self ):
411
424
if self ._initial_data is not None :
412
425
return self .to_representation (self ._initial_data )
413
- return ReturnList ( serializer = self )
426
+ return []
414
427
415
428
def get_value (self , dictionary ):
416
429
"""
@@ -438,7 +451,7 @@ def to_internal_value(self, data):
438
451
})
439
452
440
453
ret = []
441
- errors = ReturnList ( serializer = self )
454
+ errors = []
442
455
443
456
for item in data :
444
457
try :
@@ -459,10 +472,9 @@ def to_representation(self, data):
459
472
List of object instances -> List of dicts of primitive datatypes.
460
473
"""
461
474
iterable = data .all () if (hasattr (data , 'all' )) else data
462
- return ReturnList (
463
- [self .child .to_representation (item ) for item in iterable ],
464
- serializer = self
465
- )
475
+ return [
476
+ self .child .to_representation (item ) for item in iterable
477
+ ]
466
478
467
479
def update (self , instance , validated_data ):
468
480
raise NotImplementedError (
@@ -503,6 +515,21 @@ def save(self, **kwargs):
503
515
def __repr__ (self ):
504
516
return representation .list_repr (self , indent = 1 )
505
517
518
+ # Include a backlink to the serializer class on return objects.
519
+ # Allows renderers such as HTMLFormRenderer to get the full field info.
520
+
521
+ @property
522
+ def data (self ):
523
+ ret = super (ListSerializer , self ).data
524
+ return ReturnList (ret , serializer = self )
525
+
526
+ @property
527
+ def errors (self ):
528
+ ret = super (ListSerializer , self ).errors
529
+ if isinstance (ret , dict ):
530
+ return ReturnDict (ret , serializer = self )
531
+ return ReturnList (ret , serializer = self )
532
+
506
533
507
534
# ModelSerializer & HyperlinkedModelSerializer
508
535
# --------------------------------------------
0 commit comments