小编Rob*_*Rob的帖子

使用forms.ModelMultipleChoiceField的Django模型表单

我的Django应用程序中有一个ModelForm,它使用forms.ModelMultipleChoiceField,它在窗体上显示为forms.CheckboxSelectMultiple小部件.此ModelForm用于选择/取消选择多对多关系的值.这是问题所在:当您取消选中所有复选框并保存表单时,它不会保存.如果取消选中除1之外的所有值,它会保存正确.

这里有关于模型形式和多对多关系的技巧吗?我遇到了一个bug吗?我是Django的新手.提前致谢.

自定义字段:

class NetworkMessageChoiceField(forms.ModelMultipleChoiceField):
    def label_from_instance(self, obj):
        return obj.display_message    
Run Code Online (Sandbox Code Playgroud)

型号表格:

class MessageTemplateForm(forms.ModelForm):
    network_messages = NetworkMessageChoiceField(queryset=NetworkMessageTemplate.objects, 
                                             widget=forms.CheckboxSelectMultiple())        
    class Meta:
        model = UserProfile
        fields = ('network_messages',)
Run Code Online (Sandbox Code Playgroud)

查看保存表单:

def save_message_templates(request, extra_context=dict()):
    try:
        profile_obj = request.user.get_profile()
    except ObjectDoesNotExist:
        profile_obj = UserProfile(user=request.user)

    if request.method == 'POST':
        form = MessageTemplateForm(request.POST, instance=profile_obj)
        if form.is_valid():
            form.save()
            return redirect('/')

    return index(request, message_template_form=form)
Run Code Online (Sandbox Code Playgroud)

编辑:

我的表单字段缺少必需= False.

class MessageTemplateForm(forms.ModelForm):
    network_messages = NetworkMessageChoiceField(queryset=NetworkMessageTemplate.objects, 
                                                 widget=forms.CheckboxSelectMultiple(),
                                                 required=False)        
    class Meta:
        model = UserProfile
        fields = ('network_messages',)
Run Code Online (Sandbox Code Playgroud)

django checkbox many-to-many django-forms modelform

6
推荐指数
1
解决办法
4090
查看次数

标签 统计

checkbox ×1

django ×1

django-forms ×1

many-to-many ×1

modelform ×1