1

我正在尝试创建一个带有标签字段的敲击块,以便用户可以选择他想要从中过滤的标签。我使用创建了标签字段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 字段是空的。

我应该怎么做才能解决这个问题?(输入未填充所选标签)

按预期工作以选择标签

验证错误,因为 filter_tags 字段为空

4

2 回答 2

2

稍微改进一下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)
于 2020-04-17T04:05:02.430 回答
1

LB Ben Johnston 帮助我将标签放入块中,但我最终遇到了同样的错误,因为我无法将标签字段留空。为了解决这个问题,我修改了上面的内容(LB Ben Jonston 的回答),现在 TagsBlock 是:

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.field 中。

如果用户愿意,这允许我将标签字段留空。

希望有帮助!

于 2020-04-17T14:02:37.203 回答