Правильный способ добавления EmbedBlock в StreamField через код?

У меня есть модель страницы с StreamField:

from wagtail.core.fields import StreamField
from wagtail.embeds.blocks import EmbedBlock

class SomeModel(Page):
    stream_field = StreamField(
        [
            ("embed", EmbedBlock()),
        ]
    )

Я хотел бы создать новый экземпляр SomeModel с помощью кода и заполнить stream_field значением для встраивания. Например.

from wagtail.embeds.blocks import EmbedValue

some_model_instance = SomeModel()

embed_url = "https://youtube.com/something"

embed_value = EmbedValue(embed_url)

embed_block = ("embed", embed_value)

some_model_instance.stream_field.append(embed_block)

some_model_instance.save()

Приведенный выше шаблон кода работает без ошибок, но когда я просматриваю содержимое в пользовательском интерфейсе администратора трясогузки, поле остается пустым (как будто ничего не было предоставлено).

Как добавить содержимое в блок Wagtail StreamField EmbedBlock с помощью кода?


person Brylie Christopher Oxley    schedule 10.03.2021    source источник
comment
Я попытался обернуть embed_value в EmbedBlock, но получаю сообщение об ошибке: AttributeError: объект EmbedBlock не имеет атрибута 'url'   -  person Brylie Christopher Oxley    schedule 10.03.2021


Ответы (1)


Способ, которым я смог добавить вставку в StreamField, выглядит следующим образом:

from wagtail.embeds.embeds import get_embed

some_model_instance = SomeModel()

embed_url = "https://youtube.com/something"

embed = get_embed(embed_url)

embed_block = ("embed", embed)

some_model_instance.stream_field.append(embed_block)

some_model_instance.save()
person Brylie Christopher Oxley    schedule 10.03.2021