Ver código fonte

fix: delete custom tables when doctype is deleted (#18433) (#18471)

* fix: delete custom tables when doctype is deleted

(cherry picked from commit 20593f155d)

Co-authored-by: Ankush Menat <ankush@frappe.io>
version-14
mergify[bot] 2 anos atrás
committed by GitHub
pai
commit
cb4d825c56
Nenhuma chave conhecida encontrada para esta assinatura no banco de dados ID da chave GPG: 4AEE18F83AFDEB23
3 arquivos alterados com 23 adições e 1 exclusões
  1. +7
    -1
      frappe/cache_manager.py
  2. +12
    -0
      frappe/core/doctype/doctype/test_doctype.py
  3. +4
    -0
      frappe/model/delete_doc.py

+ 7
- 1
frappe/cache_manager.py Ver arquivo

@@ -130,12 +130,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)



+ 12
- 0
frappe/core/doctype/doctype/test_doctype.py Ver arquivo

@@ -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


+ 4
- 0
frappe/model/delete_doc.py Ver arquivo

@@ -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)


Carregando…
Cancelar
Salvar