Set default value via domain inversion only when deferred operand is id

Other cases for deferred operand can not be deduced as unique for sure.

Closes #14005
This commit is contained in:
Cédric Krier
2025-05-08 18:22:54 +02:00
parent c22cef7e23
commit 6159c55203
2 changed files with 9 additions and 22 deletions
+5 -14
View File
@@ -1771,7 +1771,6 @@
// XXX to remove once server domains are fixed
value = null;
}
var setdefault = true;
var original_domain;
if (!jQuery.isEmptyObject(record.group.domain)) {
original_domain = inversion.merge(record.group.domain);
@@ -1779,20 +1778,12 @@
original_domain = inversion.merge(domain);
}
var domain_readonly = original_domain[0] == 'AND';
let setdefault;
if (leftpart.contains('.')) {
var recordpart = leftpart.split('.', 1)[0];
var localpart = leftpart.split('.', 1)[1];
var constraintfields = [];
if (domain_readonly) {
for (const leaf of inversion.localize_domain(
original_domain.slice(1))) {
constraintfields.push(leaf);
}
}
if ((localpart != 'id') ||
!~constraintfields.indexOf(recordpart)) {
setdefault = false;
}
let localpart = leftpart.split('.').slice(1).join('.');
setdefault = localpart == 'id';
} else {
setdefault = true;
}
if (setdefault && jQuery.isEmptyObject(pre_validate)) {
this.set_client(record, value);
@@ -132,20 +132,16 @@ class Field(object):
if value is False:
# XXX to remove once server domains are fixed
value = None
setdefault = True
if record.group.domain:
original_domain = merge(record.group.domain)
else:
original_domain = merge(domain)
domain_readonly = original_domain[0] == 'AND'
if '.' in leftpart:
recordpart, localpart = leftpart.split('.', 1)
constraintfields = set()
if domain_readonly:
for leaf in localize_domain(original_domain[1:]):
constraintfields.add(leaf[0])
if localpart != 'id' or recordpart not in constraintfields:
setdefault = False
localpart = leftpart.split('.', 1)[1]
setdefault = localpart == 'id'
else:
setdefault = True
if setdefault and not pre_validate:
self.set_client(record, value)
state_attrs['domain_readonly'] = domain_readonly