Frappe/ERPNext中如何正确删除自定义doctype?迁移及数据库处理疑问
自定义DocType正确删除操作流程
- 先确认目标DocType没有被其他文档、自定义字段、打印格式、工作流、客户端脚本、权限规则等资源关联依赖,存在依赖的情况下删除操作会直接失败
- 登录Frappe后台,进入「DocType List」页面,找到要删除的自定义DocType进入详情页
- 点击页面右上角「删除」按钮,按提示确认操作,系统会自动生成对应的删除迁移文件,存储到对应自定义应用的目录下
- 本地开发环境执行
bench migrate,确认本地已无该DocType、业务功能无异常后再执行后续同步操作
删除操作跨服务器同步方法
- 本地操作完成后,将自定义应用的所有代码变更(包含自动生成的删除迁移文件)提交到代码仓库
- 目标服务器拉取最新的应用代码后,直接执行
bench migrate即可自动同步删除逻辑,不需要额外手动配置
删除后数据库表是否需要手动删除
- 正常完成上述流程的情况下,执行
bench migrate时Frappe会自动删除对应的数据库表(表名规则为tab{DocType名称})、关联字段记录、权限配置等所有存储资源,不需要手动处理 - 注意:删除DocType前请务必备份数据库,避免误删业务数据无法恢复
执行bench migrate后DocType仍留存的排查方案
- 检查目标服务器的自定义应用代码是否已更新到最新版本,确认被删除DocType的对应文件夹已经从
{应用名}/doctype/目录下移除,若还存在说明本地删除时未生成有效删除记录,需要回到开发环境重新走删除流程 - 执行
bench doctor查看migrate过程的报错日志,若存在未清理的依赖关联,migrate会跳过删除操作,按照日志提示清理所有关联依赖后重新执行bench migrate即可 - 确认删除逻辑执行完成后,执行
bench clear-cache和bench clear-website-cache清理系统缓存,刷新页面后再校验是否还存在该DocType - 若以上操作都无效,可执行强制删除逻辑:运行
bench console输入以下代码执行即可
frappe.delete_doc("DocType", "替换为你的DocType名称", force=True) frappe.db.commit()
执行完成后重新跑一次bench migrate和清缓存操作即可。
内容的提问来源于stack exchange,提问作者Roshan888
相关产品推荐
相关产品推荐

