Tengo un ModelForm en mi aplicación Django que usa un forms.ModelMultipleChoiceField, que se muestra como un widget forms.CheckboxSelectMultiple en el formulario. Este ModelForm se usa para seleccionar/deseleccionar valores para una relación de muchos a muchos. Este es el problema: cuando deselecciona todas las casillas de verificación y guarda el formulario, no se guarda. Si desmarca todo menos 1, guarda correctamente.Formulario de modelo Django utilizando forms.ModelMultipleChoiceField
¿Hay algún truco que me falta aquí acerca de los modelos y las relaciones de muchos a muchos? ¿Me encuentro con un error? Soy nuevo en Django. Gracias por adelantado.
campo personalizado: Formulario
class NetworkMessageChoiceField(forms.ModelMultipleChoiceField):
def label_from_instance(self, obj):
return obj.display_message
Modelo:
class MessageTemplateForm(forms.ModelForm):
network_messages = NetworkMessageChoiceField(queryset=NetworkMessageTemplate.objects,
widget=forms.CheckboxSelectMultiple())
class Meta:
model = UserProfile
fields = ('network_messages',)
Ver que salva 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)
Editar:
mis FO rm campo faltante Required = False.
class MessageTemplateForm(forms.ModelForm):
network_messages = NetworkMessageChoiceField(queryset=NetworkMessageTemplate.objects,
widget=forms.CheckboxSelectMultiple(),
required=False)
class Meta:
model = UserProfile
fields = ('network_messages',)
¡Gracias! Esa fue completamente la respuesta. Lo descubrí después de publicar mi pregunta. Me faltaba Required = False en mi campo de formulario. \t clase 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 de = forms.CheckboxSelectMultiple(), \t \t \t \t \t \t \t \t \t \t \t \t \t requerido = False) \t \t clase Meta: modelo \t \t \t = UserProfile \t \t \t Fields = ('network_messages',) – Rob
Excelente! Contento de estar en servicio. – jathanism