def save(self, obj, data, is_m2m=False):
if not self.readonly:<EOL><INDENT>attrs = self.attribute.split('<STR_LIT>')<EOL>for attr in attrs[:-<NUM_LIT:1>]:<EOL><INDENT>obj = getattr(obj, attr, None)<EOL><DEDENT>cleaned = self.clean(data)<EOL>if cleaned is not None or self.saves_null_values:<EOL><INDENT>if not is_m2m:<EOL><INDENT>setattr(obj, attrs[-<NUM_LIT:1>], cleaned)<EOL><DEDENT>else:<EOL><INDENT>getattr(obj, attrs[-<NUM_LIT:1>]).set(cleaned)<EOL><DEDENT><DEDENT><DEDENT>
If this field is not declared readonly, the object's attribute will
be set to the value returned by :meth:`~import_export.fields.Field.clean`.