Wagtail中ListBlock内嵌RichText字段JSON序列化报错解决方法
问题原因
Error: Object of type RichText is not JSON serializable.
该报错的根因为从RichTextBlock中取出的字段值是Wagtail封装的RichText实例对象,并非原生字符串,Python默认的JSON序列化器无法识别该类型。
解决方案
只需将RichText对象转换为字符串即可,根据业务需求有两种转换方式可选:
- 如需获取最终渲染完成的HTML内容:直接用
str()方法包裹RichText对象 - 如需获取富文本编辑器存储的原始源码(包含Wagtail内部短标记):取
RichText对象的source属性
修改后代码
class AvvisiBlock(blocks.StructBlock): avvisi = blocks.ListBlock( blocks.StructBlock( [ ("title", blocks.CharBlock(classname="full title", icon="title", required=True)), ("text", blocks.RichTextBlock(icon="pilcrow", required=True)), ] ) ) def get_api_representation(self, value, context=None): dict_list = [] for item in value["avvisi"]: temp_dict = { 'title': item.get("title"), 'text': str(item.get("text")), # 此处修改,将RichText对象转成字符串 # 若需要原始富文本源码可替换为下行 # 'text': item.get("text").source, } dict_list.append(temp_dict) return dict_list
修改后返回的text字段为原生字符串,可正常被JSON序列化。
内容的提问来源于stack exchange,提问作者nickb84
相关产品推荐
相关产品推荐

