我知道可以通过使用自定义表单类(子类化
WagtailAdminModelForm
)并使用 self.add_error("<field_name>", "<error_message>")
将错误添加到常规管理表单中。但是,是否也可以将错误消息添加到内联面板的内联表单项中?
例如,在我的例子中,禁止在内联面板中添加重复的条目。当用户添加重复项目并尝试提交时,所有重复项目都应突出显示并显示错误消息。
编辑:我需要为
Snippet
(不是Page
)执行此操作
您可以在 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 中。