Support explicit delete and remove for saving and on_change xxx2Many
issue4140 review291281002
This commit is contained in:
1 parent
abb6a22ec6
commit
01a65f6c6b
2 files changed
+27
-18
No files matched your search
@@ -748,30 +748,38 @@ class O2MField(Field):
|
||||
else:
|
||||
fields = {}
|
||||
|
||||
to_remove = []
|
||||
for record2 in record.value[self.name]:
|
||||
if not record2.id:
|
||||
to_remove.append(record2)
|
||||
group = record.value[self.name]
|
||||
if value and value.get('delete'):
|
||||
for record_id in value['delete']:
|
||||
record2 = group.get(record_id)
|
||||
if record2 is not None:
|
||||
group.remove(
|
||||
record2, remove=False, signal=False,
|
||||
force_remove=False)
|
||||
if value and value.get('remove'):
|
||||
for record_id in value['remove']:
|
||||
record2 = record.value[self.name].get(record_id)
|
||||
record2 = group.get(record_id)
|
||||
if record2 is not None:
|
||||
to_remove.append(record2)
|
||||
for record2 in to_remove:
|
||||
record.value[self.name].remove(record2, signal=False,
|
||||
force_remove=False)
|
||||
group.remove(
|
||||
record2, remove=True, signal=False,
|
||||
force_remove=False)
|
||||
|
||||
if value and (value.get('add') or value.get('update', [])):
|
||||
record.value[self.name].add_fields(fields)
|
||||
for index, vals in value.get('add', []):
|
||||
new_record = record.value[self.name].new(default=False)
|
||||
record.value[self.name].add(new_record, index, signal=False)
|
||||
new_record = None
|
||||
id_ = vals.pop('id', None)
|
||||
if id_ is not None:
|
||||
new_record = group.get(id_)
|
||||
if not new_record:
|
||||
new_record = group.new(obj_id=id_, default=False)
|
||||
group.add(new_record, index, signal=False)
|
||||
new_record.set_on_change(vals)
|
||||
|
||||
for vals in value.get('update', []):
|
||||
if 'id' not in vals:
|
||||
continue
|
||||
record2 = record.value[self.name].get(vals['id'])
|
||||
record2 = group.get(vals['id'])
|
||||
if record2 is not None:
|
||||
record2.set_on_change(vals)
|
||||
|
||||
|
||||
@@ -314,16 +314,17 @@ class Group(SignalEvent, list):
|
||||
record.signal_connect(self, 'record-changed', self._record_changed)
|
||||
record.signal_connect(self, 'record-modified',
|
||||
self._record_modified)
|
||||
if position == -1:
|
||||
self.append(record)
|
||||
else:
|
||||
self.insert(position, record)
|
||||
if record not in self:
|
||||
if position == -1:
|
||||
self.append(record)
|
||||
else:
|
||||
self.insert(position, record)
|
||||
for record_rm in self.record_removed:
|
||||
if record_rm.id == record.id:
|
||||
self.record_removed.remove(record)
|
||||
self.record_removed.remove(record_rm)
|
||||
for record_del in self.record_deleted:
|
||||
if record_del.id == record.id:
|
||||
self.record_deleted.remove(record)
|
||||
self.record_deleted.remove(record_del)
|
||||
self.current_idx = position
|
||||
record.modified_fields.setdefault('id')
|
||||
record.signal('record-modified')
|
||||
|
||||
Reference in new issue
Block a user