是否可以为单个 InlinePanel 项目指定错误?

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

我知道可以通过使用自定义表单类(子类化

WagtailAdminModelForm
)并使用
self.add_error("<field_name>", "<error_message>")
将错误添加到常规管理表单中。但是,是否也可以将错误消息添加到内联面板的内联表单项中?

例如,在我的例子中,禁止在内联面板中添加重复的条目。当用户添加重复项目并尝试提交时,所有重复项目都应突出显示并显示错误消息。

编辑:我需要为

Snippet
(不是
Page

执行此操作
wagtail wagtail-admin wagtail-snippet
1个回答
0
投票

您可以在 Orderable 类上设置唯一的共同约束,该类根据需要唯一的字段检查 ParentalKey 字段。 Wagtail 在每个后续重复字段(但不是第一个)上显示表单级别错误和错误。

例如,我有一个

TemplateTextSetItem
Orderable 类,其 ParentalKey 字段
set
指向 ClusterableModel 类:

class TemplateTextSetItem(Orderable):
    set = ParentalKey(
        "TemplateText",
        related_name="templatetext_items",
        help_text=_("Template Set to which this item belongs."),
        verbose_name="Set Name",
    )
    template_tag = models.CharField(
        max_length=50,
        help_text=_("Enter a tag without spaces, consisting of lowercase letters, numbers, and underscores.\nThe first character must be a lowercase letter."),
        verbose_name="Template Tag",
    )    
    text = models.TextField(
        null=True,
        blank=True,
        help_text=_("The text to be inserted in the template.")
    )

    panels = [
        FieldPanel('template_tag'),
        FieldPanel('text'),
    ]

    def __str__(self):
        return self.template_tag

    class Meta:
        unique_together = ('set', 'template_tag')

如果我在同一个父

template_tag
实例中输入
TemplateText
的重复值,我将得到以下结果:

(1、2 和 3 都具有相同的

template_tag
值,2 和 3 表单上显示字段错误)

如果我在不同的父实例中输入“test1”,则不会出现错误,因为它在该实例中是唯一的。

unique_together
实际上在Django中有一个弃用警告,应该写成:

class Meta:
    constraints = [
        models.UniqueConstraint(
            fields=['set', 'template_tag'], 
            name='unique_set_template_tag'
            )
    ]

目前,Wagtail 不处理

UniqueConstraint
引发的错误,而是抛出 500 错误。我认为它可能会出现在 Wagtail 6 中。

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