命名

Frappe 中的所有 DocType 都有一个名为 name 的主键。这是您查找记录并使用 ORM 操作记录的唯一 ID。

命名方法

您可以配置创建新文档时如何命名。框架中提供了 9 种命名方式:

  1. 由用户设置
  2. 自动递增
  3. 按字段名
  4. 按“命名系列”字段
  5. 表达式
  6. 表达式(旧式)
  7. 随机
  8. UUID
  9. 通过脚本

1. 由用户设置

文档名称由用户在创建时手动输入。

2. 自动递增

系统通过递增最后创建的文档来生成一个顺序数字名称。

关键注意事项:

  • 编号从 1 开始。
  • 不保证连续无间隙: 已删除的记录编号不会被重用。例如,如果您有名为 1234 的文档,并且您删除了 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}.-.#####

此格式允许您组合:

  • 静态文本(EXAMPLEtest
  • 日期变量(MMYYYYDDWWtimestamp
  • 字段值({fieldname1}
  • 自动递增数字( #####

6. 表达式(旧式)

警告:在 v16 中弃用 此方法已弃用,并将在版本 16 中移除。

这是一种高度灵活的方法,可以使用多个字段值和变量配置命名方案。您可以直接在 DocType 设置中的 自动名称 字段中输入此模式。

示例模式:

EXAMPLE-{MM}-test-{fieldname1}-{fieldname2}-{#####}

此格式允许您组合:

  • 静态文本 EXAMPLEtest
  • 日期变量 {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 创建多个文档命名规则,这些规则可以根据筛选条件有选择地应用。

要定义文档命名规则,您必须指定:

  1. 应用该规则的文档类型
  2. 规则的优先级(优先级高的规则将首先应用)
  3. 应用规则的条件
  4. 命名规则

编号

您可以根据定义的条件为规则定义各种编号前缀。这是通过设置该规则的前缀和位数来完成的。

例如,如果您要为高优先级待办事项创建单独的编号:

  1. 前缀:todo-high-
  2. 位数:3

将产生类似 todo-high-001todo-high-002 等的编号。

命名优先级

当多个命名规则可能适用时,框架按以下顺序确定优先级:

  1. 文档命名规则:在 DocType 的 autoname 属性中定义。
  2. 控制器方法:在控制器脚本的 autoname 方法中定义的逻辑(如果已定义,则覆盖 DocType 设置)。

特殊规则

  1. 子 DocType 不遵循命名规则
  2. 修订后的文档会在原文档名称后添加后缀(如 -1-2 等)