def get_diff_data(serializer): if not has_changes(serializer): return None data = {} changed_fields = get_changed_fields(serializer) orig = get_original_representation(serializer) for column_name in serializer.initial_data: field = serializer.fields.get(column_name, None) if not field: continue data[column_name] = field_data = [] if column_name in orig: field_data.append( fields.to_string_representation(field, orig[column_name]) ) else: field_data.append(u'') field_change = changed_fields.get(column_name, None) if not field_change: continue new_value = field_change.new field_data.append( fields.to_string_representation(field, new_value) ) return data
def get_export_row(self, serializer, instance): results = [] representation = serializer.to_representation(instance=instance) for column_name, value in representation.items(): field = serializer.fields[column_name] val = fields.to_string_representation(field, value) # TODO: Excel escaping should be done for Excel/CSV formats results.append(strings.excel_escape(val)) return results
def might_have_changes(serializer): submitted_fields = [ (field_name, field) for field_name, field in serializer.fields.items() if field_name in serializer.initial_data and not field.read_only and not field.write_only ] rep = serializer.to_representation(serializer.instance) initial = { field_name: fields.to_string_representation( field, serializer.initial_data[field_name] ) for field_name, field in submitted_fields } result = { field_name: fields.to_string_representation(field, rep[field_name]) for field_name, field in submitted_fields } return result != initial