1

我正在尝试获取带有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 %}

知道我做错了什么吗?

根据这个问题/答案,我尝试添加widgets={'noon_options': Select2MultipleWidget}modelformset_factory定义中,这无济于事:我仍然坚持使用原始SelectMultiple小部件。

4

1 回答 1

0

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

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

{% for form in formset.forms %}
...
于 2021-02-16T21:17:51.007 回答