如何在Customer Doctype中添加Tree类型字段,设置Territory仅可选叶子节点
在Customer Doctype中添加树形Territory链接字段(仅允许选叶子节点)
前提准备:确保Territory是Tree类型Doctype
- 若未创建Territory Doctype,新建时勾选Is Tree选项,系统会自动生成父节点字段(如
parent_territory)和is_leaf标识字段(自动维护节点是否为叶子)。 - 若已存在Territory,进入Doctype编辑页面,开启Is Tree开关,保存后系统会自动补充树形结构所需字段。
在Customer Doctype中添加字段
- 进入Customize Form,选择
CustomerDoctype。 - 点击Add Field,配置以下参数:
- 字段名:
territory(可自定义) - 标签:
Territory - 类型:
Link - 选项:
Territory(关联到树形结构的Territory Doctype) - 切换到Advanced标签,勾选Tree Select选项,字段将以树形选择器展示,替代普通下拉列表。
- 字段名:
限制仅允许选择叶子节点
方法1:客户端实时验证
在Customer Doctype的Client Script中添加代码:
frappe.ui.form.on('Customer', { territory: function(frm) { if (frm.doc.territory) { frappe.db.get_doc('Territory', frm.doc.territory).then(doc => { if (!doc.is_leaf) { frappe.msgprint('请选择叶子节点的地区'); frm.set_value('territory', ''); } }); } } });
方法2:服务器端验证(更严谨)
在Customer Doctype的Python Script中添加validate方法:
def validate(self): if self.territory: territory_doc = frappe.get_doc('Territory', self.territory) if not territory_doc.is_leaf: frappe.throw('请选择叶子节点的地区')
测试验证
打开Customer表单,点击Territory字段选择器即可看到树形结构的地区列表;尝试选择非叶子节点时,会触发验证提示,确保仅叶子节点可被选中并保存。
内容的提问来源于stack exchange,提问作者Paula Mansour
相关产品推荐
相关产品推荐

