在文档类型事件上执行代码

要在 DocType 被插入、验证(保存前)、更新、提交、取消、删除时执行代码,你必须在 DocType 的控制器模块中编写代码。

1. 控制器模块

控制器模块位于 DocType 模块的 doctype 文件夹中。例如,ToDo 的控制器位于 frappe/desk/doctype/todo/todo.py(版本 5)。创建 DocType 时会自动生成一个控制器模板,内容如下:

from future import unicode_literals

import frappe
from frappe.model.document import Document

class CustomType(Document):
pass

2. 文档属性

所有字段和子表都可以作为类的属性访问。例如,name 属性就是 self.name

3. 添加方法

在此模块中,你可以向类中添加标准方法,这些方法会在创建该类型的文档时被调用。标准处理器包括:

  1. autoname:在命名时调用。你可以在此方法中设置 self.name 属性。
  2. before_insert:在文档插入前调用。
  3. validate:在文档保存前调用。如果你不希望文档被保存,可以抛出异常。
  4. on_update:在文档插入或更新到数据库后调用。
  5. on_submit:在提交后调用。
  6. on_cancel:在取消后调用。
  7. on_trash:在文档被删除后调用。