diff --git a/addons/web/static/src/views/relational_model.js b/addons/web/static/src/views/relational_model.js
index c3ebbdfd2bd..71da7c7aa27 100644
--- a/addons/web/static/src/views/relational_model.js
+++ b/addons/web/static/src/views/relational_model.js
@@ -1759,6 +1759,10 @@ export class DynamicRecordList extends DynamicList {
parentActiveFields: this.activeFields,
onRecordWillSwitchMode: this.onRecordWillSwitchMode,
defaultContext: this.defaultContext,
+ rawContext: {
+ parent: this.rawContext,
+ make: () => this.context,
+ },
...params,
});
if (this.model.useSampleModel) {
diff --git a/addons/web/static/tests/views/list_view_tests.js b/addons/web/static/tests/views/list_view_tests.js
index 6952e390a28..5b95a4a3014 100644
--- a/addons/web/static/tests/views/list_view_tests.js
+++ b/addons/web/static/tests/views/list_view_tests.js
@@ -14343,4 +14343,89 @@ QUnit.module("Views", (hooks) => {
assert.strictEqual(target.querySelector(".o_data_row [name=int_field]").innerText, value);
assert.verifySteps(["create", "read"]);
});
+
+ QUnit.test("create a record with the correct context", async (assert) => {
+ serverData.models.foo.fields.text.required = true;
+ serverData.models.foo.records = [];
+
+ await makeView({
+ resModel: "foo",
+ type: "list",
+ arch: `
+
+
+
`,
+ serverData,
+ mockRPC(route, args) {
+ if (args.method === "create") {
+ assert.step("create");
+ const { context } = args.kwargs;
+ assert.strictEqual(context.default_text, "yop");
+ assert.strictEqual(context.test, true);
+ }
+ },
+ context: {
+ default_text: "yop",
+ test: true,
+ },
+ });
+ await click(target.querySelector(".o_list_button_add"));
+ await editInput(target, "[name='display_name'] input", "blop");
+ assert.containsOnce(target, ".o_selected_row");
+
+ await click(target, ".o_list_view");
+ assert.containsNone(target, ".o_selected_row");
+
+ assert.deepEqual(
+ [...target.querySelectorAll(".o_data_row .o_data_cell")].map((el) => el.textContent)[
+ ("blop", "yop")
+ ]
+ );
+
+ assert.verifySteps(["create"]);
+ });
+
+ QUnit.test("create a record with the correct context in a group", async (assert) => {
+ serverData.models.foo.fields.text.required = true;
+
+ await makeView({
+ resModel: "foo",
+ type: "list",
+ arch: `
+
+
+
`,
+ groupBy: ["bar"],
+ serverData,
+ mockRPC(route, args) {
+ if (args.method === "create") {
+ assert.step("create");
+ const { context } = args.kwargs;
+ assert.strictEqual(context.default_bar, true);
+ assert.strictEqual(context.default_text, "yop");
+ assert.strictEqual(context.test, true);
+ }
+ },
+ context: {
+ default_text: "yop",
+ test: true,
+ },
+ });
+ await click(target.querySelectorAll(".o_group_name")[1]);
+
+ await click(target.querySelector(".o_group_field_row_add a"));
+ await editInput(target, "[name='display_name'] input", "blop");
+ assert.containsOnce(target, ".o_selected_row");
+
+ await click(target, ".o_list_view");
+ assert.containsNone(target, ".o_selected_row");
+
+ assert.deepEqual(
+ [...target.querySelectorAll(".o_data_row .o_data_cell")].map((el) => el.textContent)[
+ ("blop", "yop")
+ ]
+ );
+
+ assert.verifySteps(["create"]);
+ });
});