为StreamField创建标签块

问题描述 投票:0回答:2

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

wagtail wagtail-streamfield
2个回答
1
投票

稍加改进,在field调用中设置__init__似乎起作用。

基于与custom block types相关的文档。

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)

0
投票

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内部。

如果用户愿意,这使我可以将标签字段留空。

希望有帮助!

© www.soinside.com 2019 - 2024. All rights reserved.