Django Forms.Checkboxselectmultiple emits: Select a Valid Choice. [''] is not one of the available Choices

Asked

Viewed 406 times

0

I’m trying to use a checkbox to select items in a list, but returns me the following error:

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

py.models app:

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)

py views. app:

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})

1 answer

1


What you can do is change the field Question class Student for Arrayfield. And in class Studentform change the field Question for Forms.Multiplechoicefield. So you can save all the options entered by the user.

  • Hello @J. Pedro A. really this way I solved my problem but was seeing that using Arrayfield I would be conditioned to use only Postgres, It will be even?

  • 1

    Yes, unfortunately you need the postgres. It’s an exclusive field, I don’t know if other banks have this kind of integration, where they add fields like Arrayfield.

Browser other questions tagged

You are not signed in. Login or sign up in order to post.