Использование и ошибка Django MultpleSelectionField

У меня есть следующий код

models.py

fitness_choices = (('wl', 'Weight Loss'), ('ft', 'Firming and Toning'),
                   ('yo', 'Yoga'), ('ot', 'Others'), )
periods_to_train = (('da', 'Daily'), ('ft', 'Few Times A Week'),
                    ('oa', 'Once A Week'), )

class Fitness(models.Model):
    fitness_goals = models.CharField(max_length=80, choices=fitness_choices)
    training_periods = models.CharField(max_length=5, choices=periods_to_train)

forms.py

class FitnessForm(ModelForm):
    fitness_goals = forms.MultipleChoiceField(
            choices=fitness_choices, widget=forms.CheckboxSelectMultiple)
    training_periods = forms.MultipleChoiceField(
            choices=DAYS_OF_WEEK, widget=forms.CheckboxSelectMultiple)

    class Meta:
          model = Fitness

views.py

from apps.services.forms import FitnessForm

def fitness(request):
    """ Creating a Fitness RFQ """
    fitness_rfq_form = FitnessForm()
    if request.method == 'POST':
        fitness_rfq_form = FitnessForm(request.POST)
        if fitness_rfq_form.is_valid():
            obj = fitness_rfq_form.save(commit=False)
            obj.user = request.user
            obj.save()
            return HttpResponseRedirect(reverse('home'))
    context = {'fitness_rfq_form': fitness_rfq_form}
    return render(request, 'services/fitness_rfq.html', context)

Но когда я пытаюсь представить, я получаю ошибку проверки, как показано ниже

Select a valid choice. [u'wl', u'ft'] is not one of the available choices.

Select a valid choice. [u'0', u'1'] is not one of the available choices.

Итак, почему это показывало выше ошибку проверки, даже если мы упомянули это как MultiplechoiceField в ModelForm?

1 ответ

Вы не должны указывать choices в поле модели... это часть, которая не проходит проверку.

Ваша форма работает нормально, и результатом поля с множественным выбором, конечно же, является список выбранных вариантов. Но тогда ваше поле модели ожидает одно значение от choices,

Если вы хотите сохранить список выбранных вариантов в CharField, вам нужно сначала преобразовать их в строку, возможно, через json.dumps

Другие вопросы по тегам