diff --git a/composer/schema/grid/field.py b/composer/schema/grid/field.py index aefd2d2..2188d7e 100644 --- a/composer/schema/grid/field.py +++ b/composer/schema/grid/field.py @@ -148,10 +148,25 @@ class RecordsFieldInstance(GridFieldInstance): if not value: value = [] result = [] + oldValue = getattr(self.clientContext, self.name, []) for idx, row in enumerate(value): item = self.unmarshallRow(row, idx) if item: - result.append(item) + if len(oldValue) > idx: + oldItem = oldValue[idx] + for k, v in item.items(): + if v != '__no_change__': + oldItem[k] = v + #if oldItem.get(k) == '__no_change__': + # del oldItem[k] + #if oldItem: + result.append(oldItem) + else: + for k, v in item.items(): + if v == '__no_change__': + del item[k] + if item: + result.append(item) return result diff --git a/composer/schema/instance.py b/composer/schema/instance.py index cb1cd87..11d2718 100644 --- a/composer/schema/instance.py +++ b/composer/schema/instance.py @@ -1,5 +1,5 @@ # -# Copyright (c) 2007 Helmut Merz helmutm@cy55.de +# Copyright (c) 2013 Helmut Merz helmutm@cy55.de # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -18,8 +18,6 @@ """ Instance adapter classes for schemas. - -$Id$ """ from BTrees.OOBTree import OOBTree @@ -110,7 +108,7 @@ class Editor(BaseInstance): fieldHandlers[ftype](context, value, fi, formState) else: oldValue = getattr(context, name, None) - if value != oldValue: + if value not in ('__no_change__', oldValue): setattr(context, name, value) fi.change = (oldValue, value) formState.changed = True