Frage

Ich habe eine Modelform in meiner Django-Anwendung, die eine forms.ModelMultipleChoiceField verwendet, die Displays als forms.CheckboxSelectMultiple Widget auf dem Formular. Diese Modelform dient zur Auswahl / Abwahl Werte für eine many-to-many-Beziehung. Hier ist das Problem: Wenn Sie alle Kontrollkästchen deaktivieren und das Formular speichern, ist es nicht zu speichern. Wenn Sie alle, aber 1 deaktivieren, tut es richtig speichern.

Gibt es irgendwelche Tricks, die ich hier über Vordrucke bin fehlt und many-to-many-Beziehungen? Bin Begegnung ich einen Fehler? Ich bin neu in Django. Vielen Dank im Voraus.

Benutzerdefinierte Feld:

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

Modell Form:

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

Sehen Sie das Formular speichert:

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)

Bearbeiten:

Ihr Formularfeld fehlt required = False fest.

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

Lösung

Sie haben nicht fügen, was Ihr Modell aussieht, so ich, dass network_messages Feld in Ihrem Modell bin zu raten, ist nicht erforderlich. Wenn das der Fall ist, dann, wenn Sie das Formular mit dem Wert dieses Feldes als NULL (leer) einreichen versuchen, dann form.is_valid() nicht True zurückkehrt und damit Ihre form.save() ausgeführt nie werden.

Haben Sie versucht, diese Dinge aus einer interaktiven Shell ausführt, instanziieren das Formular aus und versuchen, ihn manuell save()?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top