From 0a2ab6364c817496572ab07735ce080ded9a3b39 Mon Sep 17 00:00:00 2001 From: Raizaaa <89463672+raizasafeel@users.noreply.github.com> Date: Wed, 31 Dec 2025 12:00:49 +0530 Subject: [PATCH] fix: added 'autoname' to reserved keywords (#35473) * fix: added 'autoname' to reserved keywords * fix: prevent using autoname as DocField name - Add validation for autoname in check_invalid_fieldnames() - Treat Python keywords as reserved fieldnames * fix: move autoname out of reserved keywords * fix: move python keywords out of reserved keywords * fix: skip reserved docfield name check for 'DocType' --------- Co-authored-by: Raiza Safeel --- frappe/core/doctype/doctype/doctype.py | 11 +++++++++++ frappe/model/base_document.py | 1 + 2 files changed, 12 insertions(+) diff --git a/frappe/core/doctype/doctype/doctype.py b/frappe/core/doctype/doctype/doctype.py index 22f9620ba6..77482dc8b0 100644 --- a/frappe/core/doctype/doctype/doctype.py +++ b/frappe/core/doctype/doctype/doctype.py @@ -1278,6 +1278,8 @@ def validate_fields(meta: Meta): validate_column_name(fieldname) def check_invalid_fieldnames(docname, fieldname): + RESERVED_DOCFIELD_NAMES = frozenset(("autoname",)) + if fieldname in RESERVED_KEYWORDS: frappe.throw( _("{0}: fieldname cannot be set to reserved keyword {1}").format( @@ -1287,6 +1289,15 @@ def validate_fields(meta: Meta): title=_("Invalid Fieldname"), ) + if fieldname in RESERVED_DOCFIELD_NAMES and docname != "DocType": + frappe.throw( + _("{0}: fieldname cannot be set to reserved field {1} in DocType").format( + frappe.bold(docname), + frappe.bold(fieldname), + ), + title=_("Invalid Fieldname"), + ) + def check_unique_fieldname(docname, fieldname): duplicates = list( filter(None, map(lambda df: (df.fieldname == fieldname and str(df.idx)) or None, fields)) diff --git a/frappe/model/base_document.py b/frappe/model/base_document.py index ebfe364b60..039fc78187 100644 --- a/frappe/model/base_document.py +++ b/frappe/model/base_document.py @@ -2,6 +2,7 @@ # License: MIT. See LICENSE import datetime import json +import keyword import weakref from types import MappingProxyType from typing import TYPE_CHECKING, TypeVar