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',)
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
Eccellente! Felice di essere al servizio. – jathanism