Создание TagsBlock для StreamField - PullRequest
0 голосов
/ 07 апреля 2020

Я пытаюсь создать пораженный блок, в котором есть поле тегов, чтобы пользователь мог выбрать теги, по которым он хочет фильтровать. Я создал поле тегов, используя wagtail.admin.widgets import AdminTagWidget.

class TagsBlock(FieldBlock):
    field = forms.CharField(
        widget=AdminTagWidget
        )

class RelatedArticlesBlock(StructBlock):
    title = CharBlock(required=False)
    filter_tags = TagsBlock()
    no_of_items = IntegerBlock()

. Оно работает, как и ожидалось, для выбора тегов. Но когда я сохраняю, это дает ошибки проверки, потому что поле filter_tags пусто.

Что мне нужно сделать, чтобы это исправить? (Вход не заполнен выбранными тегами)

Works as expected for selecting tags

Validation errors because the filter_tags field is empty

Ответы [ 2 ]

1 голос
/ 17 апреля 2020

LB Бен Джонстон помог мне поместить теги в блоки, но в итоге я столкнулся с той же ошибкой, что и вы, так как не смог оставить поле тега пустым. Чтобы исправить это, я изменил вышеупомянутое (ответ Б.Б. Джонстона) так, чтобы тег TagBlock теперь был:

class TagsBlock(blocks.FieldBlock):
    """
    Basic Stream Block that will use the Wagtail tags system.
    Stores the tags as simple strings only.
    """

    def __init__(self, required=False, help_text=None, **kwargs):
        self.field = forms.CharField(widget=AdminTagWidget, required=False)
        super().__init__(**kwargs)

required=False теперь находится внутри поля self.

Это разрешено мне оставить поле тега пустым, если пользователь хочет.

Надеюсь, это поможет!

1 голос
/ 17 апреля 2020

Небольшое уточнение: установка field в вызове __init__ работает.

На основе документов, относящихся к типам пользовательских блоков .

from django import forms

from wagtail.admin.widgets import AdminTagWidget

# ...

class TagsBlock(FieldBlock):
    """
    Basic Stream Block that will use the Wagtail tags system.
    Stores the tags as simple strings only.
    """

    def __init__(self, required=False, help_text=None, **kwargs):
        # note - required=False is critical if you are adding this block to an existing streamfield (or you can set up your manual migrations to avoid this need)
        self.field = forms.CharField(widget=AdminTagWidget, required=False)
        super().__init__(**kwargs)
...