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:
1 parent
8bd9720e2a
commit
ddbde7cdaf
2 files changed
+1
-21
No files matched your search
@@ -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:
|
||||
|
||||
Reference in new issue
Block a user