首页 > 解决方案 > Select a valid choice. ["objects"] is not one of the available choices. in Django

问题描述

I'm going to create a form where the user can select any number of objects from the options.(MultipleChoiceField)

Here are my files:

DAY_CHOICES = (
('saturday', 'شنبه'),
('sunday', 'یکشنبه'),
('monday', 'دوشنبه'),
('tuesday', 'سه شنبه'),
('wednesday', 'چهارشنبه'),
('thursday', 'پنج شنبه'),
('friday', 'جمعه'),)

# Models.py
class CorporationRequest(models.Model):
    user = models.ForeignKey(User)
    title = models.CharField(max_length=250, )
    explain = models.CharField(max_length=500, )
    assistance = models.CharField(max_length=250, choices=ASSISTANCE_CHOICES)
    days =   # MultipleChoiceField
    created_date = models.DateTimeField( auto_now_add=True)

# Forms.py
class ObjectsForm(ModelForm):
    objects = forms.MultipleChoiceField(widget=forms.CheckboxSelectMultiple,
                                     choices=OBJECT_CHOICES)
    class Meta:
        model = ObjectModel
        fields = '__all__'
# Views.py 
def add_corporation(request)
    if request.method == "POST":
        form = ObjectsForm(request.POST)
        if form.is_valid():
            new_corporation = form.save(commit=False)
            new_corporation.days = ','.join(form.cleaned_data['days'])
            new_corporation.save()
            return redirect('administrator:view_admin_user_corporation')
    else:
        form = ObjectsForm()
    template = 'corporation.html'
    context = {'form': form, }
    return render(request, template, context)

When I click on the submit button (for example select object 1 and 2), I get this error:

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

Hint: each user send request to us that contain explanation and days that he can do something. So, Each user can select any day that he want.

标签: pythondjangodjango-formsdjango-2.2multiplechoicefield

解决方案


如果您必须离开CorporationRequest.daysCharField那么您可以将日期选择保存为字段中的逗号分隔字符串

class CorporationRequest(models.Model):
    days = models.CharField(max_length=255)

您必须清理来自多项选择字段的数据,以便可以将其保存在该字段中

class CorporationRequestForm(ModelForm):
    days = forms.MultipleChoiceField(widget=forms.CheckboxSelectMultiple,
                                 choices=DAY_CHOICES)
    class Meta:
        model = CorporationRequest
        fields = '__all__'

    def clean_days(self):
        return ','.join(self.cleaned_data['days'])

这意味着CorporationRequest.days现在是一个字符串,而不是天数列表。您可以向CorporationRequest模型添加一个方法以返回天数列表

def get_days(self):
    return self.days.split(',')

推荐阅读