You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何替换django_jsonform中JSONField的内部文本输入为富文本组件?

解决django_jsonform中JSONField字符串输入替换为TinyMCE的方法

不用替换整个JSONField的组件,django_jsonform本身支持针对Schema里的特定字段指定自定义widget,专门解决这类需求:

方法1:针对单个字符串字段指定富文本组件

  1. 先定义适配的TinyMCE Widget(项目已配置好TinyMCE可直接用现有Widget):
from django import forms
from tinymce.widgets import TinyMCE

class RichTextWidget(TinyMCE):
    def __init__(self, *args, **kwargs):
        kwargs.setdefault('attrs', {})
        kwargs['attrs']['cols'] = 80
        kwargs['attrs']['rows'] = 10
        super().__init__(*args, **kwargs)
  1. 在Model的JSONField Schema中,给需要富文本的string类型字段添加"widget"参数,指定自定义Widget:
from django.db import models
from django_jsonform.models.fields import JSONField

MY_SCHEMA = {
    "type": "array",
    "items": {
        "type": "object",
        "properties": {
            "title": {"type": "string"},
            # 给content字段替换为富文本输入
            "content": {
                "type": "string",
                "widget": RichTextWidget
            }
        },
        "required": ["title", "content"]
    }
}

class MyModel(models.Model):
    data = JSONField(schema=MY_SCHEMA)

方法2:全局替换所有字符串类型的组件

如果想让Schema里所有string字段都用TinyMCE,可重写django_jsonform的表单字段类,替换默认的string widget:

from django_jsonform.forms.fields import JSONFormField

class CustomJSONFormField(JSONFormField):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        # 替换所有string类型的默认widget为TinyMCE
        self.widget.field_widgets['string'] = RichTextWidget

# 在Admin中使用自定义字段
from django.contrib import admin

@admin.register(MyModel)
class MyModelAdmin(admin.ModelAdmin):
    formfield_overrides = {
        JSONField: {'form_class': CustomJSONFormField}
    }

注意事项

  • 不要直接替换JSONField的widget参数,这会覆盖django_jsonform自带的Schema渲染组件,导致变成纯JSON文本输入,也就是你之前遇到的问题。
  • 确保TinyMCE静态资源已正确加载到Admin页面,可在Admin的Media类中引入:
class MyModelAdmin(admin.ModelAdmin):
    # ...其他配置
    class Media:
        js = ('tinymce/tinymce.min.js', 'tinymce/config.js')

内容的提问来源于stack exchange,提问作者Derek Chadwell

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 00:06:04