Frappe 中的所有 DocType 都有一个名为 name 的主键。这是您查找记录并使用 ORM 操作记录的唯一 ID。
命名方法
您可以配置创建新文档时如何命名。框架中提供了 9 种命名方式:
- 由用户设置
- 自动递增
- 按字段名
- 按“命名系列”字段
- 表达式
- 表达式(旧式)
- 随机
- UUID
- 通过脚本
1. 由用户设置
文档名称由用户在创建时手动输入。
2. 自动递增
系统通过递增最后创建的文档来生成一个顺序数字名称。
关键注意事项:
- 编号从 1 开始。
- 不保证连续无间隙: 已删除的记录编号不会被重用。例如,如果您有名为
1、2、3、4的文档,并且您删除了3,则下一个文档将被命名为5,而不是3。 - 一旦设置了此命名方式,除非 DocType 中没有文档,否则无法切换到其他命名方案。
- 除非 DocType 中没有文档,否则无法从其他命名方案切换到此命名方案。
自动递增
3. 按字段名
文档名称直接从特定字段的值中获取。
注意: 所选字段中的值必须始终是唯一的。
按字段名
4. 按“命名系列”字段
命名模式来源于文档中的特定字段(通常是 naming_series)。
例如,如果您的文档中有一个字段 naming_series,并且其值设置为 PRE.#####,则将使用该模式来生成名称(例如,PRE00001)。此值可以根据文档而变化,允许同一 DocType 中的不同文档遵循不同的模式。
要求: 这仅在您的 DocType 中有一个名为
naming_series的字段时才有效。
按“命名系列”
5. 表达式
您可以提供一个标准的命名模式,该模式将自动递增。
例如,如果您将模式设置为 PRE-.#####:
- 创建的第一个文档将被命名为
PRE-00001 - 第二个将是
PRE-00002 - 依此类推…
表达式
您可以使用此方法,通过多个字段值和变量灵活地配置命名方案。各个部分由点号 . 分隔。
示例模式:
EXAMPLE-.MM.-test-.{fieldname1}.-.{fieldname2}.-.#####
此格式允许您组合:
- 静态文本(
EXAMPLE、test) - 日期变量(
MM、YYYY、DD、WW、timestamp) - 字段值(
{fieldname1}) - 自动递增数字(
#####)
6. 表达式(旧式)
警告:在 v16 中弃用 此方法已弃用,并将在版本 16 中移除。
这是一种高度灵活的方法,可以使用多个字段值和变量配置命名方案。您可以直接在 DocType 设置中的 自动名称 字段中输入此模式。
示例模式:
EXAMPLE-{MM}-test-{fieldname1}-{fieldname2}-{#####}
此格式允许您组合:
- 静态文本
EXAMPLE、test) - 日期变量
{MM}、{YYYY}、{DD}) - 字段值
{fieldname1}) - 自动递增数字
{#####})
7. 随机
生成一个随机的字母数字字符串作为文档名称。
随机
8. UUID
使用随机生成的通用唯一标识符(UUID v4)作为文档名称。
示例: 550e8400-e29b-41d4-a716-446655440000
UUID
9. 通过脚本
您可以使用 DocType 的 Python 文件中的 autoname 控制器方法定义自定义命名逻辑。这使您可以完全控制命名过程。
from frappe.model.naming import getseries
class Project(Document):
def autoname(self):
# select a project name based on customer
prefix = f"P-{self.customer}"
series = getseries(prefix, 3)
self.name = f"{prefix}-{series}"
按文档命名规则
您还可以通过创建 文档命名规则 来为 DocType 创建命名规则。
您可以为特定 doctype 创建多个文档命名规则,这些规则可以根据筛选条件有选择地应用。
要定义文档命名规则,您必须指定:
- 应用该规则的文档类型
- 规则的优先级(优先级高的规则将首先应用)
- 应用规则的条件
- 命名规则
编号
您可以根据定义的条件为规则定义各种编号前缀。这是通过设置该规则的前缀和位数来完成的。
例如,如果您要为高优先级待办事项创建单独的编号:
- 前缀:todo-high-
- 位数:3
将产生类似 todo-high-001、todo-high-002 等的编号。
命名优先级
当多个命名规则可能适用时,框架按以下顺序确定优先级:
- 文档命名规则:在 DocType 的
autoname属性中定义。 - 控制器方法:在控制器脚本的
autoname方法中定义的逻辑(如果已定义,则覆盖 DocType 设置)。
特殊规则
- 子 DocType 不遵循命名规则
- 修订后的文档会在原文档名称后添加后缀(如
-1、-2等)