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