Django - 修改 Inlineformset 删除按钮

Posted

技术标签:

【中文标题】Django - 修改 Inlineformset 删除按钮【英文标题】:Django - Modify Inlineformset Delete button 【发布时间】:2018-03-12 00:46:31 【问题描述】:

我为内联表单集定制 UI/UX。

默认情况下,inlineformset 小部件有一个删除按钮。

我想使用 javascript 从 inlineformset 动态中添加和删除表单。 在某些情况下删除只是一个按钮而不是复选框,在其他情况下是在模式窗口中。

当用户单击删除时,表单会使用 javascript 从页面中删除。

所以,我尝试在不使用默认小部件的情况下执行此操作,在模板中呈现字段,但我不知道如何告诉 Django 女巫字段删除以及是否有必要重新调整字段的 ID 和名称。

【问题讨论】:

【参考方案1】:

我对这个问题的解决方案是覆盖 CheckboxInput 小部件类的 template_name:

widgets.CheckboxInput.template_name = 'widgets/delete.html'

我在托管我的自定义小部件的 app/widgets.py 中添加了它。由于我在我的应用程序中使用相同的格式,我认为这是唯一的方法。

app/templates/widgets/delete.html:

<div class="checkbox checkbox-styled">
<label>
    <input name= widget.name  type="checkbox" value="true" % if widget.attrs.checked == True %checked% endif %>
    <span>Delete</span>
</label>
</div>

如果它不是 inlineformset_factory,那么最好的方法是创建一个扩展 BaseFormSet 的新类并覆盖 add_fields中的小部件> 类似this answer 中建议的方法。

【讨论】:

以上是关于Django - 修改 Inlineformset 删除按钮的主要内容,如果未能解决你的问题,请参考以下文章

django - 具有多个 ForeignKey 的 inlineformset_factory

django:如何在表单向导中使用 inlineformset?

在 Django inlineformset_factory 中过滤查询集

在 Django 的 inlineformset_factory 中选择外键元素的子集

在inlineformset的形式中,我怎么知道哪些是我的默认表单字段,哪些是Django添加的字段?

Django formset_factory vs modelformset_factory vs inlineformset_factory