Django forms.CheckboxSelectMultiple issues: Select a valid choice. [''] is not one of the choices available

0
I'm trying to use a checkbox to select items in a list, but it returns the following error:

Select a valid choice. [''] is not one of the available choices.

app models.py :

from django.db import models
from django import forms
from django.forms import ModelForm

class Student(models.Model):

    TAKE_COMPUTER_CHOICES = (
        ('sim', 'Sim'),
        ('nao', 'Não'),
    )
    COMPUTER_TYPE_CHOICES = (
        ('windows', 'Windows'),
        ('linux', 'Linux'),
        ('mac', 'Mac'),
    )
    QUESTI0N_CHOICES = (
        ('resposta_1', 'Obter um diferencial no mercado de trabalho'),
        ('resposta_2', 'Aumentar meu salário'),
        ('resposta_3', 'Criar um site ou aplicativo'),
        ('resposta_4', 'Fazer trabalho social'),
        ('resposta_5', 'Apoiar o crescimento do meu futuro negócio'),
        ('resposta_6', 'Desenvolver habilidade digital'),
        ('resposta_7', 'Aumentar minha criatividade'),
        ('resposta_8', 'Aprender a lidar com problemas complexos'),
        ('resposta_9', 'Melhorar minha habilidade de colaboração'),
        ('resposta_10', 'Ter uma carreira alternativa'),
        ('resposta_11', 'Compreender melhor o mundo digital'),
        ('resposta_12', 'Ampliar as possibilidades de minha carreira.'),
        ('resposta_13', 'Ter mais agilidade e dinamismo.'),
        ('resposta_14', 'Desenvolver habilidade lógica'),
        ('resposta_15', 'Melhorar meu desempenho acadêmico.'),
        ('resposta_16', 'Ganhar eficiência - Fazer mais com menos.'),
        ('resposta_17', 'Melhorar minha auto-estima.'),
        ('resposta_18', 'Trabalhar colaborativamente com outros profissionais'),
        ('resposta_19', 'Desenvolver habilidade analítica.'),
        ('resposta_20', 'Empoderamento e Autonomia'),
    )

    cpf = models.CharField(
        max_length=14, unique = True, verbose_name = 'CPF')
    ra = models.CharField(
        max_length=10, unique= True, verbose_name='RA')
    takeComputer = models.CharField(
        max_length=3, choices=TAKE_COMPUTER_CHOICES, verbose_name='Você levará seu computador pessoal?')
    computerType = models.CharField(
        max_length=7, choices=COMPUTER_TYPE_CHOICES, verbose_name='Qual o sistema operacional do seu notebook?:', blank=True)
    question = models.CharField(
        max_length=100, choices=QUESTI0N_CHOICES, verbose_name='Como a habilidade de saber programar pode ajudar minha carreira?'
    )

    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)
    termAccepted = models.BooleanField(default=1, verbose_name='Eu li e aceito o uso da minha imagem')

    def __str__(self):
        return self.ra

class StudentForm(forms.ModelForm):
    class Meta:
        model = Student
        fields = ['cpf',
                'ra',
                'takeComputer',
                'computerType',
                'question',
                'termAccepted',]

    TAKE_COMPUTER_CHOICES = (
        ('sim', 'Sim'),
        ('nao', 'Não'),
    )
    QUESTI0N_CHOICES = (
        ('resposta_1', 'Obter um diferencial no mercado de trabalho'),
        ('resposta_2', 'Aumentar meu salário'),
        ('resposta_3', 'Criar um site ou aplicativo'),
        ('resposta_4', 'Fazer trabalho social'),
        ('resposta_5', 'Apoiar o crescimento do meu futuro negócio'),
        ('resposta_6', 'Desenvolver habilidade digital'),
        ('resposta_7', 'Aumentar minha criatividade'),
        ('resposta_8', 'Aprender a lidar com problemas complexos'),
        ('resposta_9', 'Melhorar minha habilidade de colaboração'),
        ('resposta_10', 'Ter uma carreira alternativa'),
        ('resposta_11', 'Compreender melhor o mundo digital'),
        ('resposta_12', 'Ampliar as possibilidades de minha carreira.'),
        ('resposta_13', 'Ter mais agilidade e dinamismo.'),
        ('resposta_14', 'Desenvolver habilidade lógica'),
        ('resposta_15', 'Melhorar meu desempenho acadêmico.'),
        ('resposta_16', 'Ganhar eficiência - Fazer mais com menos.'),
        ('resposta_17', 'Melhorar minha auto-estima.'),
        ('resposta_18', 'Trabalhar colaborativamente com outros profissionais'),
        ('resposta_19', 'Desenvolver habilidade analítica.'),
        ('resposta_20', 'Empoderamento e Autonomia'),
    )

    question = forms.ChoiceField(label='Como a habilidade de saber programar pode ajudar minha carreira?', choices=QUESTI0N_CHOICES, widget=forms.CheckboxSelectMultiple)
    takeComputer = forms.ChoiceField(label='Você levará seu computador pessoal?', choices=TAKE_COMPUTER_CHOICES, widget=forms.RadioSelect)

app views.py :

from django.shortcuts import render, redirect
from .models import *

def create_student(request):
    form = StudentForm(request.POST or None)
    if form.is_valid() and form.cleaned_data['termAccepted'] == True:
        student = form.save()

        request.session['student_id'] = student.id
        return redirect('registrations:create_student')

    return render(request, 'student-form-registration.html', {'form': form})
    
asked by anonymous 31.08.2018 / 19:49

1 answer

1

What you can do is change the question field of the Student class to ArrayField . And in the StudentForm class, change the question field to forms.MultipleChoiceField . This way you can save all the options entered by the user.

    
05.09.2018 / 00:03