控制器方法允许您在文档的生命周期内编写业务逻辑。
让我们创建第二个文档类型:图书馆会员。它将包含以下字段:
- 名字(数据,必填)
- 姓氏(数据)
- 全名(数据,只读)
- 电子邮件地址(数据)
- 电话(数据)
创建文档类型后,前往图书馆会员列表,从 设置 > 重新加载 清除缓存,然后创建一个新的图书馆会员。
如果您注意到,表单中没有显示“全名”字段。这是因为我们将其设置为只读。只有当它有值时才会显示。
让我们在 Python 控制器类中编写代码,使“全名”能够根据“名字”和“姓氏”自动计算。
打开您的代码编辑器,打开文件 library_member.py 并进行以下更改:
librarymember.py
class LibraryMember(Document):
#this method will run every time a document is saved
def before_save(self):
self.full_name = f'{self.first_name} {self.last_name or ""}'
注意
如果上述代码片段对您不起作用,请确保已启用服务器端脚本,然后重新启动 bench
bench set-config -g server_script_enabled true
我们在 before_save 方法中编写了逻辑,该方法在每次保存文档时运行。这是 Document 类提供的众多钩子之一。您可以在控制器文档中了解所有可用钩子的更多信息。
现在,返回并创建另一个图书馆会员,保存后即可看到“全名”显示出来。
下一步:DocType 的类型