Wagtail как JSON сериализовать поле RichText в ListBlock
Ошибка: Объект типа RichText не является JSON сериализуемым.
Мой код:
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"]:
print(item)
temp_dict = {
'title': item.get("title"),
'text': item.get("text"),
}
dict_list.append(temp_dict)
return dict_list
элемент в значении:
StructValue([('title', 'avvisi importanti 1'), ('text', <wagtail.core.rich_text.RichText object at 0x000001F73FCDE988>)])
как можно сериализовать объект?
Как описано в документации Wagtail rich text internals, существует два возможных представления насыщенного текста - "символическое" представление источника, которое отслеживает ссылки на страницу и другие элементы, такие как изображения, по их ID, и отображаемая версия HTML (которая ссылается на них по URL, как вы и ожидали).
Если вы хотите, чтобы API вернул отрисованный HTML, используйте:
temp_dict = {
'title': item.get("title"),
'text': str(item.get("text")),
}
Или если вы хотите, чтобы он возвращал символьный источник:
temp_dict = {
'title': item.get("title"),
'text': item.get("text").source,
}