我的 Django 应用程序中有一个 ModelForm,它使用 forms.ModelMultipleChoiceField,它在表单上显示为 forms.CheckboxSelectMultiple 小部件。此 ModelForm 用于选择/取消选择多对多关系的值。这是问题所在:当您取消选中所有复选框并保存表单时,它不会保存。如果您取消选中除 1 之外的所有选项,它会正确保存。
关于模型形式和多对多关系,我在这里缺少什么技巧吗?我遇到错误了吗?我是 Django 的新手。提前致谢。
自定义字段:
class NetworkMessageChoiceField(forms.ModelMultipleChoiceField):
def label_from_instance(self, obj):
return obj.display_message
模型形式:
class MessageTemplateForm(forms.ModelForm):
network_messages = NetworkMessageChoiceField(queryset=NetworkMessageTemplate.objects,
widget=forms.CheckboxSelectMultiple())
class Meta:
model = UserProfile
fields = ('network_messages',)
保存表单的视图:
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)
编辑:
我的表单字段丢失了Required=False。
class MessageTemplateForm(forms.ModelForm):
network_messages = NetworkMessageChoiceField(queryset=NetworkMessageTemplate.objects,
widget=forms.CheckboxSelectMultiple(),
required=False)
class Meta:
model = UserProfile
fields = ('network_messages',)