diff --git a/addons/web/static/src/views/basic_relational_model.js b/addons/web/static/src/views/basic_relational_model.js
index 3a1f55ccd0d..23f9ce90196 100644
--- a/addons/web/static/src/views/basic_relational_model.js
+++ b/addons/web/static/src/views/basic_relational_model.js
@@ -1233,14 +1233,16 @@ export class RelationalModel extends Model {
return newRecord;
}
- async addNewRecord(list, params) {
+ async addNewRecord(list, params, withParentId = true) {
const parentId = this.__bm__.localData[list.__bm_handle__].parentID;
const fieldName = list.__fieldName__;
const context = this.__bm__._getContext(this.__bm__.localData[parentId], { fieldName });
params.context = makeContext([context, params.context]);
params.__syncParent = () => list.__syncData();
const newRecord = this.createDataPoint("record", params);
- newRecord.__bm_load_params__.parentID = list.__bm_handle__;
+ if (withParentId) {
+ newRecord.__bm_load_params__.parentID = list.__bm_handle__;
+ }
await newRecord.load();
return newRecord;
}
diff --git a/addons/web/static/src/views/fields/relational_utils.js b/addons/web/static/src/views/fields/relational_utils.js
index 9ec84a605b9..2aaf8c000dd 100644
--- a/addons/web/static/src/views/fields/relational_utils.js
+++ b/addons/web/static/src/views/fields/relational_utils.js
@@ -561,6 +561,7 @@ export function useOpenX2ManyRecord({
getList,
updateRecord,
saveRecord,
+ withParentId,
}) {
const viewService = useService("view");
const userService = useService("user");
@@ -601,7 +602,7 @@ export function useOpenX2ManyRecord({
mode: "edit",
viewType: "form",
};
- record = await model.addNewRecord(list, recordParams);
+ record = await model.addNewRecord(list, recordParams, withParentId);
}
addDialog(
@@ -617,15 +618,19 @@ export function useOpenX2ManyRecord({
await saveRecord(rec);
}
if (saveAndNew) {
- return model.addNewRecord(list, {
- context: list.context,
- resModel: resModel,
- activeFields: form.activeFields,
- fields: { ...form.fields },
- views: { form },
- mode: "edit",
- viewType: "form",
- });
+ return model.addNewRecord(
+ list,
+ {
+ context: list.context,
+ resModel: resModel,
+ activeFields: form.activeFields,
+ fields: { ...form.fields },
+ views: { form },
+ mode: "edit",
+ viewType: "form",
+ },
+ withParentId
+ );
}
},
title,
diff --git a/addons/web/static/src/views/fields/x2many/x2many_field.js b/addons/web/static/src/views/fields/x2many/x2many_field.js
index bcc5361bdde..5eb33ef5f79 100644
--- a/addons/web/static/src/views/fields/x2many/x2many_field.js
+++ b/addons/web/static/src/views/fields/x2many/x2many_field.js
@@ -67,6 +67,7 @@ export class X2ManyField extends Component {
getList: () => this.list,
saveRecord,
updateRecord,
+ withParentId: this.activeField.widget !== "many2many",
});
this._openRecord = (params) => {
const activeElement = document.activeElement;
diff --git a/addons/web/static/tests/views/fields/many2many_field_tests.js b/addons/web/static/tests/views/fields/many2many_field_tests.js
index 3f4bc49f5c8..8d22e49da8b 100644
--- a/addons/web/static/tests/views/fields/many2many_field_tests.js
+++ b/addons/web/static/tests/views/fields/many2many_field_tests.js
@@ -12,6 +12,7 @@ import {
getNodesTextContent,
nextTick,
patchWithCleanup,
+ addRow,
} from "@web/../tests/helpers/utils";
import { editSearch, validateSearch } from "@web/../tests/search/helpers";
import { Many2XAutocomplete } from "@web/views/fields/relational_utils";
@@ -1564,6 +1565,59 @@ QUnit.module("Fields", (hooks) => {
assert.verifySteps([]);
});
+ QUnit.test(
+ "many2many widget: creates a new record with a context containing the parentID",
+ async function (assert) {
+ serverData.views = {
+ "turtle,false,list": '