Ich habe eine ModelForm in meiner Django-App, die ein Forms.ModelMultipleChoiceField verwendet, das als Forms.CheckboxSelectMultiple Widget im Formular angezeigt wird. Diese ModelForm wird verwendet, um Werte für eine Viele-zu-Viele-Beziehung auszuwählen/abzuwählen. Hier ist das Problem: Wenn Sie alle Kontrollkästchen deaktivieren und das Formular speichern, wird es nicht gespeichert. Wenn Sie alle außer 1 deaktivieren, wird es ordnungsgemäß gespeichert.Django-Modell mit forms.ModelMultipleChoiceField
Gibt es irgendwelche Tricks, die mir an Modellformen und Viele-zu-Viele-Beziehungen fehlen? Habe ich einen Fehler? Ich bin neu in Django. Danke im Voraus.
Individuelle Field:
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',)
Ansicht, die Form 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)
Edit:
Mein fo rm Feld fehlt Required = False.
class MessageTemplateForm(forms.ModelForm):
network_messages = NetworkMessageChoiceField(queryset=NetworkMessageTemplate.objects,
widget=forms.CheckboxSelectMultiple(),
required=False)
class Meta:
model = UserProfile
fields = ('network_messages',)
Vielen Dank! Das war die vollständige Antwort. Ich habe es gerade herausgefunden, nachdem ich meine Frage gepostet habe. Mir fehlte Required = False auf meinem Formularfeld! \t Klasse MessageTemplateForm (forms.ModelForm): \t \t network_messages = NetworkMessageChoiceField (queryset = NetworkMessageTemplate.objects, \t \t \t \t \t \t \t \t \t \t \t \t \t Widget = forms.CheckboxSelectMultiple(), \t \t \t \t \t \t \t \t \t \t \t \t \t required = False) \t \t Klasse Meta: \t \t \t Modell = Userprofile \t \t \t Felder = ('network_messages') – Rob
Excellent! Stehe gerne zur Verfügung. – jathanism