6
我在我的Django應用程序中使用了一個Forms.ModelMultipleChoiceField,它在窗體上顯示爲forms.CheckboxSelectMultiple小部件。此ModelForm用於爲多對多關係選擇/取消選擇值。問題在於:如果取消選中所有複選框並保存表單,則不會保存。如果除了1以外全部取消選中,則可以正確保存。Django使用forms.ModelMultipleChoiceField的模型窗體
這裏有什麼關於模型形式和多對多關係的技巧嗎?我遇到錯誤嗎?我是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)
編輯:
我FO rm字段丟失必需= False。
class MessageTemplateForm(forms.ModelForm):
network_messages = NetworkMessageChoiceField(queryset=NetworkMessageTemplate.objects,
widget=forms.CheckboxSelectMultiple(),
required=False)
class Meta:
model = UserProfile
fields = ('network_messages',)
謝謝!這完全是答案。在發佈我的問題後,我才弄明白了。我在表單字段中缺少Required = False! \t類MessageTemplateForm(forms.ModelForm): \t \t network_messages = NetworkMessageChoiceField(查詢集= NetworkMessageTemplate.objects, \t \t \t \t \t \t \t \t \t \t \t \t \t插件= forms.CheckboxSelectMultiple(), \t \t \t \t \t \t \t \t \t \t \t \t \t需要= FALSE) \t \t類元: \t \t \t模型=用戶配置 \t \t \t欄=( 'network_messages',) – Rob 2010-02-04 03:02:13
好極了!很高興爲您服務。 – jathanism 2010-02-04 03:13:57