在wagtail设置模型中,我有一个基于CharField
的选择字段,并希望它在Wagtails FieldPanel
中表现为多选。选项被正确呈现为多个复选框,但在提交时表单验证将引发错误:
选择有效选项。['OPT1']不是可用选项之一。
那么,我如何在Wagtails FieldPanel
中使用基于文本的选择作为多选呢?
我必须以某种方式将表单字段类型覆盖为forms.fields.MultipleChoiceField
吗?
将widget
属性设置为Select
(而不是CheckboxSelectMultiple
),正确呈现和填充的选择下拉窗口小部件将按预期工作。
我目前的实现看起来(大致)如下:
# models.py
@register_setting(icon='cog')
class MySettings(BaseGenericSetting):
class MyChoices(models.TextChoices):
OPT_1 = "OPT1"
OPT_2 = "OPT2"
choicefield = models.CharField(
max_length=4,
blank=True,
choices=MyChoices.choices,
)
panels = [
FieldPanel(
'choicefield',
widget=forms.CheckboxSelectMultiple,
),
]
我没有在定制生成的表单文档中找到任何提示。
1条答案
按热度按时间rwqw0loc1#
这是因为CheckboxSelectMultiple返回的是一个所选项目的数组,而验证器期望的是在MyChoices中找到的单个值。
我想,这就是你需要的:
您需要从py命令行或在dbadmin中填充MyChoices,或者将其注册为代码片段,然后在Wagtail admin界面中添加您的值。
另外,请查看https://docs.wagtail.org/en/stable/getting_started/tutorial.html#tutorial-categories,它使用ParentalManyToManyField为博客类别创建了一个多-多选择字段。这就是我在Wagtail中处理这种情况的方法。
在后台,它设置了一个中间表,其中包含来自每个模型的ID对,以创建链接。