Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django MultpleSelectionField用法和错误_Python_Django_Multiplechoicefield - Fatal编程技术网

Python Django MultpleSelectionField用法和错误

Python Django MultpleSelectionField用法和错误,python,django,multiplechoicefield,Python,Django,Multiplechoicefield,我有以下代码 型号.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'), )

我有以下代码

型号.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)
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
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)
forms.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)
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
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)
视图.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)
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
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.

那么,尽管我们在ModelForm中将其称为multipleEchoiceField,但为什么它会显示上述验证错误呢?

您不应该在model字段中指定
选项
。。。这是验证失败的部分

您的表单工作正常,多选字段的结果当然是所选选项的列表。但是,您的模型字段期望从
选项中得到一个值

如果要将所选选项列表存储在CharField中,则需要首先将其转换为字符串,可以通过
json.dumps