From dc3ecb85bb287881fc86607f40b28979b7d7cb56 Mon Sep 17 00:00:00 2001 From: Pavel Savchenko Date: Thu, 1 Nov 2012 17:56:15 +0200 Subject: [PATCH] clean up 'pk' getattr, add the ability to specify which model fields are read_only in bulk --- rest_framework/serializers.py | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/rest_framework/serializers.py b/rest_framework/serializers.py index 8f2e315ee..0db06d150 100644 --- a/rest_framework/serializers.py +++ b/rest_framework/serializers.py @@ -73,6 +73,7 @@ class SerializerOptions(object): self.depth = getattr(meta, 'depth', 0) self.fields = getattr(meta, 'fields', ()) self.exclude = getattr(meta, 'exclude', ()) + self.read_only_fields = getattr(meta, 'read_only_fields', ()) class BaseSerializer(Field): @@ -124,14 +125,14 @@ class BaseSerializer(Field): # Add in the default fields fields = self.default_fields(serialize, obj, data, nested) for key, val in fields.items(): + if key in self.opts.read_only_fields: + val.read_only = True + if key not in ret: ret[key] = val - try: # Test if field was marked as pk_field - if getattr(val, 'is_pk_field'): - pk_field = key - except AttributeError: - pass + if getattr(val, 'is_pk_field', None): + pk_field = key # If 'fields' is specified, use those fields, in that order. if self.opts.fields: