2010-02-04 55 views
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',) 

回答

0

您沒貼你的模型是什麼樣子,所以我猜測,在模型中network_messages場是必需的。如果是這種情況,那麼當您嘗試提交該字段的值爲NULL(空)的表單時,則form.is_valid()不會返回True,因此您的form.save()永遠不會執行。

你是否嘗試過從交互式shell執行這個東西,實例化表單並試圖手動save()呢?

+0

謝謝!這完全是答案。在發佈我的問題後,我才弄明白了。我在表單字段中缺少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

+0

好極了!很高興爲您服務。 – jathanism 2010-02-04 03:13:57