Do not include removed records in the search domain of One2Many

Adding an OR-ed clause prevents the domain inversion to set any unique values
when creating a record from the search window.
The removed records can be re-add with the undelete button instead.

Closes #14540
This commit is contained in:
Cédric Krier committed 2026-01-23 09:57:31 +01:00
1 parent a7fe75478b
commit d59d2ce496
4 files changed
-16

No files matched your search

-5
View File
@@ -2637,11 +2637,6 @@
}
return result;
},
get_removed_ids: function(record) {
return record._values[this.name].record_removed.map(function(r) {
return r.id;
});
},
get_domain: function(record) {
var domains = this.get_domains(record);
var attr_domain = domains[1];
-4
View File
@@ -3692,8 +3692,6 @@ function eval_pyson(value){
if (existing_ids.length) {
domain = [domain, ['id', 'not in', existing_ids]];
}
var removed_ids = this.field.get_removed_ids(this.record);
domain = ['OR', domain, ['id', 'in', removed_ids]];
var text = this.wid_text.val();
if (this._popup) {
@@ -3986,8 +3984,6 @@ function eval_pyson(value){
if (existing_ids.length) {
domain = [domain, ['id', 'not in', existing_ids]];
}
var removed_ids = this.field.get_removed_ids(this.record);
domain = ['OR', domain, ['id', 'in', removed_ids]];
return Sao.common.update_completion(
this.wid_text, this.record, this.field, model, domain);
},
@@ -931,9 +931,6 @@ class O2MField(Field):
self._set_default_value(record)
super().state_set(record, states=states)
def get_removed_ids(self, record):
return [x.id for x in record.value[self.name].record_removed]
def domain_get(self, record):
screen_domain, attr_domain = self.domains_get(record)
# Forget screen_domain because it only means at least one record
@@ -512,8 +512,6 @@ class One2Many(Widget):
existing_ids = self.field.get_eval(self.record)
if existing_ids:
domain = [domain, ('id', 'not in', existing_ids)]
removed_ids = self.field.get_removed_ids(self.record)
domain = ['OR', domain, ('id', 'in', removed_ids)]
text = self.wid_text.get_text()
if self._popup:
@@ -621,8 +619,6 @@ class One2Many(Widget):
existing_ids = self.field.get_eval(self.record)
if existing_ids:
domain = [domain, ('id', 'not in', existing_ids)]
removed_ids = self.field.get_removed_ids(self.record)
domain = ['OR', domain, ('id', 'in', removed_ids)]
update_completion(self.wid_text, self.record, self.field, model,
domain=domain)