Wagtail从4升级至5.0.2后MultipleChooserPanel报JS错误求助
问题描述
我将Wagtail从4版本升级至5.0.2版本后,尝试打开MultipleChooserPanel时,浏览器控制台出现如下JS错误:
Uncaught TypeError: this.chooserWidgetFactory.openModal is not a function MultipleChooserPanel http://10.10.10.57:10000/api/static/wagtailadmin/js/page-editor.js?v=ce9bf046:1 page-editor.js:1:4815 MultipleChooserPanel http://10.10.10.57:10000/api/static/wagtailadmin/js/page-editor.js?v=ce9bf046:1
该功能在Wagtail全新安装环境下可正常运行,但当前项目规模庞大无法重建。已尝试清除浏览器缓存、更换浏览器,以及执行命令:./manage.py collectstatic --noinput --clear。
可能的错误原因
自定义ChooserWidget未适配API变更:Wagtail 5.0对MultipleChooserPanel相关的JS接口做了调整,
chooserWidgetFactory的openModal方法可能被重命名或修改了调用逻辑。如果项目中有自定义的内容选择器组件(继承或扩展默认ChooserWidget),其JS代码可能未同步更新,导致找不到该方法。静态资源未彻底更新:尽管执行了
collectstatic --clear,但可能存在服务器缓存、CDN缓存,或者项目内自定义模板硬引用了旧版的page-editor.js及相关组件JS,导致加载的仍是Wagtail 4.x的代码,与新版逻辑冲突。第三方插件版本不兼容:项目依赖的Wagtail第三方插件(如自定义选择器、扩展面板)可能仍停留在支持4.x的版本,未适配5.0的API,其JS代码会干扰默认MultipleChooserPanel的正常运行。
重载模板引发代码冲突:若项目重载了Wagtail admin的模板(如
wagtailadmin/pages/edit.html或相关面板模板),模板中引用的JS初始化代码可能还是旧版写法,与新版MultipleChooserPanel的构造逻辑不匹配,导致chooserWidgetFactory未被正确初始化。全局JS代码冲突:项目自定义的全局JS可能覆盖了Wagtail admin的
chooserWidgetFactory对象,或修改了其原型方法,导致新版方法无法正常调用。
内容的提问来源于stack exchange,提问作者N. Ahlers

