2010-02-04 11 views
6

Ho un ModelForm nella mia app Django che utilizza un forms.ModelMultipleChoiceField, che viene visualizzato come un form .CheckboxSelectMultiple widget nel modulo. Questo ModelForm viene utilizzato per selezionare/deselezionare i valori per una relazione molti-a-molti. Ecco il problema: quando deselezioni tutte le caselle di controllo e salvi il modulo, questo non viene salvato. Se deselezioni tutto tranne 1, lo fa correttamente.Modulo modello di Django utilizzando i moduli. ModelloMultipleChoiceField

Ci sono trucchi che mi mancano qui sulle forme del modello e le relazioni molti-a-molti? Sto incontrando un bug? Sono nuovo di Django. Grazie in anticipo.

campo personalizzato: Modulo

class NetworkMessageChoiceField(forms.ModelMultipleChoiceField): 
    def label_from_instance(self, obj): 
     return obj.display_message  

Modello:

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

View che consente di risparmiare forma:

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) 

Modifica:

mie fo mancava il campo rm Richiesto = Falso.

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

risposta

0

Non hai incollare quello che il vostro modello assomiglia, in modo da sto indovinando che network_messages campo nel modello è necessario. In questo caso, quando si tenta di inviare il modulo con il valore di tale campo come NULL (vuoto), quindi form.is_valid() non viene restituito True e pertanto il tuo form.save() non viene mai eseguito.

Hai provato a eseguire questa roba da una shell interattiva, creando un'istanza del modulo e tentando di eseguire manualmente save()?

+0

Grazie! Questa era completamente la risposta. L'ho appena capito dopo aver postato la mia domanda. Mi mancava Required = False sul mio campo modulo! \t classe MessageTemplateForm (forms.ModelForm): \t \t network_messages = NetworkMessageChoiceField (set di query = NetworkMessageTemplate.objects, \t \t \t \t \t \t \t \t \t \t \t \t \t widget di = forms.CheckboxSelectMultiple(), \t \t \t \t \t \t \t \t \t \t \t \t \t required = False) \t \t classe Meta: \t \t \t modello = UserProfile \t \t \t campi = ('network_messages',) – Rob

+0

Eccellente! Felice di essere al servizio. – jathanism

Problemi correlati