Rob*_*Rob 6 django checkbox many-to-many django-forms modelform
我的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)
您没有粘贴模型的样子,所以我猜测network_messages模型中的该字段是必需的。如果是这种情况,那么当您尝试提交该字段值为NULL(空)的表单时,则form.is_valid()不会返回True,因此您的表单form.save()永远不会被执行。
您是否尝试过从交互式 shell 中执行这些内容,实例化表单并尝试手动操作save()它?
| 归档时间: |
|
| 查看次数: |
4090 次 |
| 最近记录: |