问题描述
我正在尝试使用 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',),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
小部件。>
解决方法
手动渲染表单时,您还必须手动加载 JS 和 CSS 文件:
{# Required to render the Select2 widgets #}
{{ formset.media.js }}
{{ formset.media.css }}
{% for form in formset.forms %}
...