Correctly set xxx2many modified by on_change

set_on_change should not trigger any signal but it should register
the field as modified.

issue4968
review20391002
This commit is contained in:
Cédric Krier committed 2015-09-24 22:51:13 +02:00
1 parent 8bd9720e2a
commit ddbde7cdaf
2 files changed
+1 -21

No files matched your search

+1 -9
View File
@@ -454,11 +454,6 @@ class O2MField(Field):
def __init__(self, attrs):
super(O2MField, self).__init__(attrs)
self.in_on_change = False
def sig_changed(self, record):
if not self.in_on_change:
return super(O2MField, self).sig_changed(record)
def _group_changed(self, group, record):
if not record.parent:
@@ -661,11 +656,10 @@ class O2MField(Field):
record.modified_fields.setdefault(self.name)
def set_on_change(self, record, value):
record.modified_fields.setdefault(self.name)
self._set_default_value(record)
if isinstance(value, (list, tuple)):
self._set_value(record, value)
record.modified_fields.setdefault(self.name)
record.signal('record-modified')
return
if value and (value.get('add') or value.get('update')):
@@ -703,8 +697,6 @@ class O2MField(Field):
new_record = record.value[self.name].new(default=False)
record.value[self.name].add(new_record, index, signal=False)
new_record.set_on_change(vals)
if value.get('add'):
record.value[self.name].signal('group-changed', new_record)
for vals in value.get('update', []):
if 'id' not in vals:
@@ -461,13 +461,9 @@ class Record(SignalEvent):
self.signal('record-changed')
def set_on_change(self, values):
later = {}
for fieldname, value in values.items():
if fieldname not in self.group.fields:
continue
if isinstance(self.group.fields[fieldname], fields.O2MField):
later[fieldname] = value
continue
if isinstance(self.group.fields[fieldname], (fields.M2OField,
fields.ReferenceField)):
field_rec_name = fieldname + '.rec_name'
@@ -476,14 +472,6 @@ class Record(SignalEvent):
elif field_rec_name in self.value:
del self.value[field_rec_name]
self.group.fields[fieldname].set_on_change(self, value)
for fieldname, value in later.items():
# on change recursion checking is done only for x2many
field_x2many = self.group.fields[fieldname]
try:
field_x2many.in_on_change = True
field_x2many.set_on_change(self, value)
finally:
field_x2many.in_on_change = False
def reload(self, fields=None):
if self.id < 0: