【发布时间】:2026-01-12 21:30:01
【问题描述】:
我尝试按照here 的描述扩展我的自定义User 模型。
这适用于ModelChoiceField 和CharField 等显示的字段。
我现在的目标是添加一个RTF 字段(类似于Page 模型中显示的控件)。我查看了wagtail 的源代码,发现get_rich_text_editor_widget 方法与CharField 结合使用。可悲的是,我收到了 JavaScript 错误:
未捕获的类型错误:无法读取未定义的属性“initEditor”
我现在的猜测是我需要以某种方式包含或修改小部件的挂钩。或者是否足以覆盖模板中的JavaScript 块?现在感觉有点 hacky,我坚持包含所需的JS,这就是我发布问题的原因。也许我错过了一些微不足道的东西。
# ...
from wagtail.admin.rich_text import get_rich_text_editor_widget
class CustomUserEditForm(UserEditForm):
position = forms.ModelChoiceField(queryset=Position.objects, required=True, label=_('Position'))
# biography = forms.Textarea()
biography = forms.CharField(widget=get_rich_text_editor_widget())
更新: 更新我的模板(可能不是正确的方法):
{% block js %}
{{ block.super }}
<script type="text/javascript" src="/static/wagtailadmin/js/draftail.js"></script>
{% endblock js %}
【问题讨论】:
-
您也可以将
<link href="/static/wagtailadmin/css/panels/draftail.css" type="text/css" media="all" rel="stylesheet">添加到{% block extra_css %}。在开发控制台中输入window.draftail.initEditor会发生什么?您可以使用富文本编辑器将您的 html 与常规页面进行比较并寻找差异。当您执行widget=get_rich_text_editor_widget(name='default', features=['h2'])时会发生什么? -
正确添加
CSS样式RTF字段。基本功能似乎工作。添加图像/页面/文档会使编辑器崩溃。似乎需要更多相关的JS(例如TypeError: Cannot read property 'imageChooser' of undefined)。在添加JS之前,window.draftail是未定义的。现在它返回函数。通过args可以按预期工作。通过模板添加功能可能是一种解决方案,但我找不到所需的所有引用,并希望以更具声明性的方式导入它们。 -
我认为页面模板 do 具有所有上下文富文本 (Draftail) 需求。我可以想象在其他上下文(如用户模型视图)中使用 Draftail 甚至没有被原始作者考虑。为 Wagtail 提供功能可能是一个不错的选择。但这在短期内对你没有帮助。我认为扣款是最快的。从常规页面加载 all js 并逐个删除脚本,直到您拥有所需的最小集。很脏,但应该可以用 TM。
标签: django django-forms rtf wagtail