表单集中的 Select2MultipleWidget 未呈现

Posted

技术标签:

【中文标题】表单集中的 Select2MultipleWidget 未呈现【英文标题】:Select2MultipleWidget in formset is not rendering 【发布时间】:2021-05-17 20:26:19 【问题描述】:

我正在尝试使用 Select2MultipleWidget 小部件获取表单集,但没有成功。 使用 Django 2.2 LTS。

我的(简化的)模型如下:

class Meal(models.Model):

    noon = models.BooleanField("Meal noon", default=False)
    noon_options = models.ManyToManyField(MealOption, related_name='real_noon_options', blank=True)
    evening = models.BooleanField("Meal evening", default=False)
    comments = models.TextField("Comments", blank=True, null=True)

我使用的表格如下:

class MealUpdateForm(forms.ModelForm):

    class Meta:
        model = Meal
        fields = ('noon', 'noon_options', 'evening', 'comments', )
        widgets = 
            'noon_options': Select2MultipleWidget,
        

当我通过单个项目的测试表单呈现上述内容时,一切正常:我得到了 noon_options 字段的 Select2MultipleWidget。

不过,每当我将表单添加到 modelformset_factory 时,我都会得到 Django 的默认 SelectMultiple 小部件,这不是我想要的。

MealFormSet = modelformset_factory(Meal, 
                                   extra=0, 
                                   fields=('noon', 'noon_options', 'evening', 'comments', ),
                                   form=MealUpdateForm, )

我将模板中的表单集非常简单地呈现为:

% for form in formset.forms %
    <tr>
        <td>
             form.id 
        </td>
        <td>
             form.noon 
        </td>
        <td>
             form.noon_options 
        </td>
        <td>
             form.evening 
        </td>
        <td>
             form.comments 
        </td>
    </tr>
% endfor %

知道我做错了什么吗?

根据this question/answer,我尝试将widgets='noon_options': Select2MultipleWidget 添加到modelformset_factory 定义中,但这无济于事:我仍然坚持使用原始SelectMultiple 小部件。

【问题讨论】:

【参考方案1】:

手动渲染表单时,也必须手动加载 JS 和 CSS 文件:

# Required to render the Select2 widgets #
 formset.media.js 
 formset.media.css 

% for form in formset.forms %
...

【讨论】:

以上是关于表单集中的 Select2MultipleWidget 未呈现的主要内容,如果未能解决你的问题,请参考以下文章

如何限制表单集中的字段选择?

Django 表单集中每个表单的不同初始数据

在表单传递的表单集中插入数据

Django:如何显示内联表单集中每个模型对象的表单错误

如果引发 ValidationError,删除链接会在 Django 管理内联表单集中消失

动态填充表单集中的字段