From 5876c70f86e907d6d8f19ee3ff61a62d1b1b4681 Mon Sep 17 00:00:00 2001 From: barredterra <14891507+barredterra@users.noreply.github.com> Date: Fri, 3 Apr 2026 16:20:38 +0200 Subject: [PATCH] fix: defer DocType exports until after save response Defer standard **DocType** file export and controller generation until after the save response is sent. This allows the client form to receive the updated document payload before dev-mode file writes trigger a web reload and prevents follow-up `TimestampMismatchError` on consecutive **DocType** saves without forcing a full page reload. --- frappe/core/doctype/doctype/doctype.py | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/frappe/core/doctype/doctype/doctype.py b/frappe/core/doctype/doctype/doctype.py index 9f5cecaaa2..39f33d19e4 100644 --- a/frappe/core/doctype/doctype/doctype.py +++ b/frappe/core/doctype/doctype/doctype.py @@ -550,10 +550,19 @@ class DocType(Document): and (frappe.conf.developer_mode or frappe.flags.allow_doctype_export) ) if allow_doctype_export: - self.export_doc() - self.make_controller_template() - self.set_base_class_for_controller() - self.export_types_to_controller() + + def export_doctype_files(): + self.export_doc() + self.make_controller_template() + self.set_base_class_for_controller() + self.export_types_to_controller() + + request = getattr(frappe.local, "request", None) + # Defer file writes until after the response so the client can sync the saved doc first. + if request and hasattr(request, "after_response"): + request.after_response.add(export_doctype_files) + else: + export_doctype_files() # update index if not self.custom: