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,
    }
Вернуться на верх