Display the new record form of wizard after setting the default values

We must delay the display after the default values of the record has been set
otherwise we may trigger unnecessary RPCs (like search/reading for useless
domain).

Closes #15030
This commit is contained in:
Cédric Krier
2026-08-25 12:26:08 +02:00
parent 6ac489eecb
commit 352dedba42
4 changed files with 27 additions and 18 deletions
+8 -4
View File
@@ -1603,7 +1603,7 @@
return this.current_record.id;
}
},
new_: function(default_=true, defaults=null) {
new_: function(default_=true, defaults=null, display=true) {
var previous_view = this.current_view;
var prm = jQuery.when();
if (this.current_view &&
@@ -1636,10 +1636,14 @@
if (previous_view.view_type == 'calendar') {
previous_view.set_default_date(record, selected_date);
}
return this.display().then(() => {
this.set_cursor(true, true);
if (display) {
return this.display().then(() => {
this.set_cursor(true, true);
return record;
});
} else {
return record;
});
}
});
});
},
+12 -9
View File
@@ -78,15 +78,18 @@
var view = result.view;
this.update(view.fields_view, view.buttons);
prms.push(this.screen.new_(false).then(() => {
return this.screen.current_record.set_default(
view.defaults || {})
.then(() => {
this.screen.current_record.set(
view.values || {});
this.update_buttons();
this.screen.set_cursor();
});
prms.push(this.screen.new_(false, null, false)
.then(() => {
return this.screen.current_record.set_default(
view.defaults || {})
.then(() => {
this.screen.current_record.set(
view.values || {});
this.update_buttons();
return this.screen.display().then(() => {
this.screen.set_cursor();
});
});
}));
this.screen_state = view.state;
@@ -681,7 +681,7 @@ class Screen:
return view
def new(self, default=True, defaults=None):
def new(self, default=True, defaults=None, display=True):
previous_view = self.current_view
if self.current_view and self.current_view.view_type == 'calendar':
selected_date = self.current_view.get_selected_date()
@@ -698,9 +698,10 @@ class Screen:
if previous_view.view_type == 'calendar':
previous_view.set_default_date(record, selected_date)
self.current_record = record
self.display()
# Postpone set of the cursor to ensure widgets are allocated
GLib.idle_add(self.set_cursor, True)
if display:
self.display()
# Postpone set of the cursor to ensure widgets are allocated
GLib.idle_add(self.set_cursor, True)
return self.current_record
@property
+2 -1
View File
@@ -109,12 +109,13 @@ class Wizard(InfoBar):
view = result['view']
self.update(view['fields_view'], view['buttons'])
self.screen.new(default=False)
self.screen.new(default=False, display=False)
if 'defaults' in view:
self.screen.current_record.set_default(view['defaults'])
if 'values' in view:
self.screen.current_record.set(view['values'])
self.update_buttons()
self.screen.display()
self.screen.set_cursor()
self.screen_state = view['state']