diff --git a/frappe/model/rename_doc.py b/frappe/model/rename_doc.py index 68b03dde55..420cbee091 100644 --- a/frappe/model/rename_doc.py +++ b/frappe/model/rename_doc.py @@ -397,7 +397,11 @@ def rename_doctype(doctype: str, old: str, new: str) -> None: def update_child_docs(old: str, new: str, meta: "Meta") -> None: # update "parent" for df in meta.get_table_fields(): - frappe.qb.update(df.options).set("parent", new).where(Field("parent") == old).run() + ( + frappe.qb.update(df.options) + .set("parent", new) + .where((Field("parent") == old) & (Field("parenttype") == meta.name)) + ).run() def update_link_field_values(link_fields: list[dict], old: str, new: str, doctype: str) -> None: diff --git a/frappe/tests/test_rename_doc.py b/frappe/tests/test_rename_doc.py index d85efa79bb..e48f908147 100644 --- a/frappe/tests/test_rename_doc.py +++ b/frappe/tests/test_rename_doc.py @@ -8,6 +8,7 @@ from random import choice, sample from unittest.mock import patch import frappe +from frappe.core.doctype.doctype.test_doctype import new_doctype from frappe.exceptions import DoesNotExistError, ValidationError from frappe.model.base_document import get_controller from frappe.model.rename_doc import ( @@ -271,3 +272,29 @@ class TestRenameDoc(FrappeTestCase): self.assertEqual(doc.name, new_name) self.available_documents.append(new_name) self.available_documents.remove(name) + + def test_parenttype(self): + child = new_doctype(istable=1).insert() + table_field = { + "label": "Test Table", + "fieldname": "test_table", + "fieldtype": "Table", + "options": child.name, + } + + parent_a = new_doctype(fields=[table_field], allow_rename=1, autoname="Prompt").insert() + parent_b = new_doctype(fields=[table_field], allow_rename=1, autoname="Prompt").insert() + + parent_a_instance = frappe.get_doc( + doctype=parent_a.name, test_table=[{"some_fieldname": "x"}], name="XYZ" + ).insert() + + parent_b_instance = frappe.get_doc( + doctype=parent_b.name, test_table=[{"some_fieldname": "x"}], name="XYZ" + ).insert() + + parent_b_instance.rename("ABC") + parent_a_instance.reload() + + self.assertEqual(len(parent_a_instance.test_table), 1) + self.assertEqual(len(parent_b_instance.test_table), 1)