首页 > 解决方案 > 使用 CheckboxSelectMultiple 保存 Django ModelForm,不选中任何框

问题描述

如果没有选中任何框,则使用 CheckboxSelectMultiple 小部件的 Django 表单不会使用 CheckboxSelectMultiple 小部件回传任何字段。

class AlarmForm(forms.ModelForm):
    class Meta:
        model = models.Alarm
        fields = ['phone_contacts', 'disabled']

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        user = self.instance.user
        self.fields["phone_contacts"].widget = forms.widgets.CheckboxSelectMultiple()
        self.fields['phone_contacts'].queryset = user.phonecontact_set

如果查看表单的用户未选中任何复选框,则想法是模型的phonecontact_set字段 ( a ManyToManyField) 应该被清除。相反,如果没有选中任何框,则根本不会保存该字段。这显然是因为未选中的复选框在 Web 浏览器中的 POST 表单中不包含任何值。

尽管如此,似乎必须有一种方法可以让 Django 在不完全重新实现保存功能的情况下做到这一点,但我似乎找不到 Django 的方法来做到这一点..

标签: djangodjango-forms

解决方案


推荐阅读