fix: delete custom tables when doctype is deleted (#18433)
* fix: delete custom tables when doctype is deleted
This commit is contained in:
parent
abaa830bbc
commit
20593f155d
3 changed files with 23 additions and 1 deletions
|
|
@ -129,12 +129,18 @@ def clear_doctype_cache(doctype=None):
|
|||
clear_single(doctype)
|
||||
|
||||
# clear all parent doctypes
|
||||
|
||||
for dt in frappe.get_all(
|
||||
"DocField", "parent", dict(fieldtype=["in", frappe.model.table_fields], options=doctype)
|
||||
):
|
||||
clear_single(dt.parent)
|
||||
|
||||
# clear all parent doctypes
|
||||
if not frappe.flags.in_install:
|
||||
for dt in frappe.get_all(
|
||||
"Custom Field", "dt", dict(fieldtype=["in", frappe.model.table_fields], options=doctype)
|
||||
):
|
||||
clear_single(dt.dt)
|
||||
|
||||
# clear all notifications
|
||||
delete_notification_count_for(doctype)
|
||||
|
||||
|
|
|
|||
|
|
@ -670,6 +670,18 @@ class TestDocType(FrappeTestCase):
|
|||
|
||||
self.assertEqual(test_json.test_json_field["hello"], "world")
|
||||
|
||||
@patch.dict(frappe.conf, {"developer_mode": 1})
|
||||
def test_custom_field_deletion(self):
|
||||
"""Custom child tables whose doctype doesn't exist should be auto deleted."""
|
||||
doctype = new_doctype(custom=0).insert().name
|
||||
child = new_doctype(custom=0, istable=1).insert().name
|
||||
|
||||
field = "abc"
|
||||
create_custom_fields({doctype: [{"fieldname": field, "fieldtype": "Table", "options": child}]})
|
||||
|
||||
frappe.delete_doc("DocType", child)
|
||||
self.assertFalse(frappe.get_meta(doctype).get_field(field))
|
||||
|
||||
@patch.dict(frappe.conf, {"developer_mode": 1})
|
||||
def test_delete_doctype_with_customization(self):
|
||||
from frappe.custom.doctype.property_setter.property_setter import make_property_setter
|
||||
|
|
|
|||
|
|
@ -95,6 +95,10 @@ def delete_doc(
|
|||
|
||||
update_flags(doc, flags, ignore_permissions)
|
||||
check_permission_and_not_submitted(doc)
|
||||
# delete custom table fields using this doctype.
|
||||
frappe.db.delete(
|
||||
"Custom Field", {"options": name, "fieldtype": ("in", frappe.model.table_fields)}
|
||||
)
|
||||
frappe.db.delete("__global_search", {"doctype": name})
|
||||
|
||||
delete_from_table(doctype, name, ignore_doctypes, None)
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue