clean up 'pk' getattr,

add the ability to specify which model fields are read_only in bulk
This commit is contained in:
Pavel Savchenko 2012-11-01 17:56:15 +02:00
parent 10ed127df1
commit dc3ecb85bb

View File

@ -73,6 +73,7 @@ class SerializerOptions(object):
self.depth = getattr(meta, 'depth', 0) self.depth = getattr(meta, 'depth', 0)
self.fields = getattr(meta, 'fields', ()) self.fields = getattr(meta, 'fields', ())
self.exclude = getattr(meta, 'exclude', ()) self.exclude = getattr(meta, 'exclude', ())
self.read_only_fields = getattr(meta, 'read_only_fields', ())
class BaseSerializer(Field): class BaseSerializer(Field):
@ -124,14 +125,14 @@ class BaseSerializer(Field):
# Add in the default fields # Add in the default fields
fields = self.default_fields(serialize, obj, data, nested) fields = self.default_fields(serialize, obj, data, nested)
for key, val in fields.items(): for key, val in fields.items():
if key in self.opts.read_only_fields:
val.read_only = True
if key not in ret: if key not in ret:
ret[key] = val ret[key] = val
try:
# Test if field was marked as pk_field # Test if field was marked as pk_field
if getattr(val, 'is_pk_field'): if getattr(val, 'is_pk_field', None):
pk_field = key pk_field = key
except AttributeError:
pass
# If 'fields' is specified, use those fields, in that order. # If 'fields' is specified, use those fields, in that order.
if self.opts.fields: if self.opts.fields: