用途
该技能用于在 Frappe 应用中创建或修改 DocType JSON 定义、选择字段类型、配置命名规则、添加子表以及设置树形结构。资料强调:DocType 是每个 Frappe 应用的基础,同时定义数据模型(数据库表结构)和视图(表单布局),应始终在设计 DocType 之后再编写控制器逻辑。
主要能力
- DocType 顶层属性:列出了 name、module、is_submittable、is_tree、is_virtual、issingle、istable、is_calendar_and_gantt、track_changes、track_seen、track_views、allow_rename、allow_copy、allow_import、naming_rule、autoname、title_field、search_fields、show_title_field_in_link、image_field、sort_field、sort_order、default_print_format、max_attachments 等属性及其用途。
- 字段类型(Fieldtype)速查:给出 Data、Link、Dynamic Link、Select、Table、Table MultiSelect、Check、Int、Float、Currency、Date、Datetime、Text Editor、Attach、Small Text、Long Text 等类型及其存储内容和数据库列类型。
- 字段属性:涵盖 reqd、unique、search_index、in_list_view、in_standard_filter、in_preview、allow_on_submit、read_only、hidden、depends_on、mandatory_depends_on、read_only_depends_on、fetch_from、fetch_if_empty、options、default、description、collapsible 等。
- DocType 类型决策树:根据是否需要存储数据、是否需要多记录、是否需要提交/取消工作流、是否需要层级、是否嵌入父文档、是否为外部数据源,判断应使用标准 DocType、可提交 DocType、树形 DocType、子 DocType、单例 DocType 还是虚拟 DocType。
- 命名规则:列出 Set by User、Autoincrement、By Fieldname、By Naming Series、Expression、Expression (Old Style)、Random、UUID、By Script 等 naming_rule 取值及对应 autoname 模式与示例输出。
- 子表设计:说明 istable=1 的子 DocType 必须属于父文档,父端需添加 Table 或 Table MultiSelect 字段并设置 options 为子 DocType 名称;子记录自动获得 parent、parenttype、parentfield、idx 字段,并给出通过 append 添加子行的代码示例。
- Table 与 Table MultiSelect 对比:从 UI、子 DocType 复杂度、使用场景三个方面区分。
- 单例 DocType:issingle=1 时数据以键值对存储于 tabSingles,不建立独立表;给出 frappe.get_single 与 frappe.db.get_single_value 的访问方式,说明没有列表视图。
- 树形 DocType:is_tree=1 时自动添加 lft、rgt、parent_{doctype_fieldname}、old_parent 列,需定义 parent_field;给出查询后代与祖先的示例,并提示不要手动编辑 lft/rgt,损坏时使用 frappe.utils.nestedset.rebuild_tree()。
- 虚拟 DocType:is_virtual=1 时不建数据库表,必须实现 db_insert、load_from_db、db_update、delete、get_list、get_count、get_stats 等控制器方法;提示不要用 frappe.db.* 访问虚拟 DocType 数据。
- 自定义 API:通过 create_custom_fields 创建自定义字段(给出字典格式示例),通过 make_property_setter 修改已有 DocType 字段属性。
- 数据遮蔽(v16+):mask=1 的字段会在服务端替换为 XXXXXXXX 之类的模式后发送到客户端,Administrator 始终可见未遮蔽值;给出字段 JSON 示例。
- Python 类型存根:Frappe 通过 TypeExporter 在控制器文件中自动生成类型注解,位于 TYPE_CHECKING 守卫内,使用 DF.Link、DF.Table、DF.Literal 等类型;提示不要修改自动生成类型区间内的代码。
- 关键规则:DocType 使用单数命名;数据库表加 tab 前缀;Data/Link/Select 字段值不超过 140 字符;频繁过滤或 get_list 使用的字段设 search_index=1;用户常过滤字段设 in_standard_filter=1;影响计算的子表字段设 allow_on_submit 需重算合计;fetch_from 一般搭配 fetch_if_empty=1;depends_on 使用 eval:doc.fieldname == "value" 语法而非裸 Python。
使用方式
资料以技能说明形式组织,包含速查表、决策树、代码示例和关键规则,并指向 references/fieldtypes.md、references/naming.md、references/examples.md、references/anti-patterns.md、references/customization.md、references/data-masking.md、references/type-stubs.md 等完整参考文件。具体安装命令暂未提供。
适用场景
适用于 Frappe 应用开发中的 DocType JSON 设计工作,包括新建或修改 DocType、选择字段类型、配置命名规则、添加子表、设置树形结构、创建单例设置文档、实现虚拟 DocType、通过 API 添加自定义字段或修改字段属性等。
限制
资料未提供该技能的具体安装命令、运行环境要求、支持的 Frappe 版本范围(数据遮蔽标注为 v16+)、收费或价格信息,以及效果或性能数据,这些内容暂未提供。