Python 选择有效选项。[<;selection>;]不是可用选项之一。错误

Python 选择有效选项。[<;selection>;]不是可用选项之一。错误,python,django,modelform,Python,Django,Modelform,我想要的是多个被选择的Anwser被保存并提交到DB 然而,我在每一个问题上都犯了这个错误 my models.py class preferences(models.Model): cuisine = ( (1,u'Italian'), (2,u'American'), (3,u'French'), (4,u'Japanese'), (5,u'Russian'), (6,u'Chinese'

我想要的是多个被选择的Anwser被保存并提交到DB

然而,我在每一个问题上都犯了这个错误

my models.py

class preferences(models.Model):
    cuisine = (
        (1,u'Italian'),
        (2,u'American'),
        (3,u'French'),
        (4,u'Japanese'),
        (5,u'Russian'),
        (6,u'Chinese'),
        (7,u'Mexican'),
        (8,u'Indian'),
        (9,u'Middle Eastern'),
        (10,u'Thai'),
        (11,u'Spanish')
    )
    vegeterian = (
        (1,u'Yes'),
        (2,u'No'),
        (3,u'I appreciate both')
    )
    lunch = (
        (1,u'Cafe'),
        (2,u'Restaurant'),
        (3,u'Fast Food'),
        (4,u'Takeaway'),
        (5,u'Grocery/Lunch Box')
    )
    dinner = (
        (1,u'Inexpensive Restaurant'),
        (2,u'Fine Dining'),
        (3,u'Takeaway'),
        (4,u'Fast Food'),
        (5,u'Delivery'),
        (6,u'Cooking at home'),
        (7,u'Cheeky Bar') #Make it with a hint that having a dinner w/ a cheeky pint

    )
    Friday = (
        (1,u'Bar'),
        (2,u'Night club'),
        (3,u'Karaoke'),
        (4,u'Netflix & chill'),
        (5,u'Video games'),
        (6,u'Cinema'),
        (7,u'Theater'),
        (8,u'Restaurant'),
    )

    weekend = (
        (1,u'Hiking'),
        (2,u'Sport activities'),
        (3,u'Attending sport events'),
        (4,u'Music events'),
        (5,u'Art/Science exhibitions'),
        (6,u'Chilling at the park'),
        (7,u'Video games'),
        (8,u'Cinema'),
        (9,u'Theater'),
        (10,u'Chilling at home')
    )

    UserID = models.ForeignKey(User,related_name='User', null=True,default='')
    cuisine = models.ManyToManyField('self',choices=cuisine, max_length=20,blank=False,default='')
    cuisine_extra = models.CharField(max_length=25)
    vegeterian = models.CharField(max_length=15,choices=vegeterian)
    lunch = models.ManyToManyField('self',choices=lunch,max_length=20,blank=False,default='')
    dinner = models.ManyToManyField('self',choices=dinner,max_length=20,blank=False,default='')
    Friday = models.ManyToManyField('self',choices=Friday,max_length=20,blank=False,default='')
    weekend = models.ManyToManyField('self',choices=weekend,max_length=40,blank=False,default='')
class preferencesForm(ModelForm):

    """def __init__(self, *args, **kwargs):
        super(preferencesForm, self).__init__(*args, **kwargs)"""


    class Meta:
        model = preferences
        fields = ['cuisine', 'cuisine_extra', 'vegeterian', 'lunch', 'dinner', 'Friday', 'weekend']
        widgets = {
            'cuisine':forms.widgets.CheckboxSelectMultiple,
            'lunch':forms.widgets.CheckboxSelectMultiple,
            'dinner':forms.widgets.CheckboxSelectMultiple,
            'Friday':forms.widgets.CheckboxSelectMultiple,
            'weekend':forms.widgets.CheckboxSelectMultiple,
        }

form = preferencesForm()
这里我使用
M2Mfield
,因为我们存储多个项目,并在同一
模型(“self”)上使用它

modelform.py

class preferences(models.Model):
    cuisine = (
        (1,u'Italian'),
        (2,u'American'),
        (3,u'French'),
        (4,u'Japanese'),
        (5,u'Russian'),
        (6,u'Chinese'),
        (7,u'Mexican'),
        (8,u'Indian'),
        (9,u'Middle Eastern'),
        (10,u'Thai'),
        (11,u'Spanish')
    )
    vegeterian = (
        (1,u'Yes'),
        (2,u'No'),
        (3,u'I appreciate both')
    )
    lunch = (
        (1,u'Cafe'),
        (2,u'Restaurant'),
        (3,u'Fast Food'),
        (4,u'Takeaway'),
        (5,u'Grocery/Lunch Box')
    )
    dinner = (
        (1,u'Inexpensive Restaurant'),
        (2,u'Fine Dining'),
        (3,u'Takeaway'),
        (4,u'Fast Food'),
        (5,u'Delivery'),
        (6,u'Cooking at home'),
        (7,u'Cheeky Bar') #Make it with a hint that having a dinner w/ a cheeky pint

    )
    Friday = (
        (1,u'Bar'),
        (2,u'Night club'),
        (3,u'Karaoke'),
        (4,u'Netflix & chill'),
        (5,u'Video games'),
        (6,u'Cinema'),
        (7,u'Theater'),
        (8,u'Restaurant'),
    )

    weekend = (
        (1,u'Hiking'),
        (2,u'Sport activities'),
        (3,u'Attending sport events'),
        (4,u'Music events'),
        (5,u'Art/Science exhibitions'),
        (6,u'Chilling at the park'),
        (7,u'Video games'),
        (8,u'Cinema'),
        (9,u'Theater'),
        (10,u'Chilling at home')
    )

    UserID = models.ForeignKey(User,related_name='User', null=True,default='')
    cuisine = models.ManyToManyField('self',choices=cuisine, max_length=20,blank=False,default='')
    cuisine_extra = models.CharField(max_length=25)
    vegeterian = models.CharField(max_length=15,choices=vegeterian)
    lunch = models.ManyToManyField('self',choices=lunch,max_length=20,blank=False,default='')
    dinner = models.ManyToManyField('self',choices=dinner,max_length=20,blank=False,default='')
    Friday = models.ManyToManyField('self',choices=Friday,max_length=20,blank=False,default='')
    weekend = models.ManyToManyField('self',choices=weekend,max_length=40,blank=False,default='')
class preferencesForm(ModelForm):

    """def __init__(self, *args, **kwargs):
        super(preferencesForm, self).__init__(*args, **kwargs)"""


    class Meta:
        model = preferences
        fields = ['cuisine', 'cuisine_extra', 'vegeterian', 'lunch', 'dinner', 'Friday', 'weekend']
        widgets = {
            'cuisine':forms.widgets.CheckboxSelectMultiple,
            'lunch':forms.widgets.CheckboxSelectMultiple,
            'dinner':forms.widgets.CheckboxSelectMultiple,
            'Friday':forms.widgets.CheckboxSelectMultiple,
            'weekend':forms.widgets.CheckboxSelectMultiple,
        }

form = preferencesForm()
我试着用
\uuuu init\uuuuu
来做这件事,但也没用。在这一点上,我迷路了

视图.py

def display_form(request):
    if not request.user.is_authenticated:
        return redirect(settings.LOGIN_URL)
    if request.method == 'POST':
        form = preferencesForm(request.POST)
        if form.is_valid():
            form.UserID = request.user
            form.save()
            return HttpResponseRedirect('/')
    else:
        form = preferencesForm()
    return render(request,'display.html',{'form':form})
views.py应该可以,但以防万一

错误如下所示

选择一个有效的选项。[u'3',u'9']不是可用的 选择

(选择取决于所选选择的数量,但想法相同) 我也试着把整数改成字符串,但也没用。 还尝试了
[u'1']
等,但也不起作用

我知道我可以使用multiselectfield库,但这对我的数据库不好,因为存储多个实例不是一个好主意。 我发现有很多类似的错误,但没有一个对我有帮助:/ 非常感谢您的帮助!谢谢


错误是您的字段没有意义。多对多字段是模型之间的关系,其中每一方可以有多个项。它不是选项列表中的一组项


您应该使用CommaseParatedIntegraterField,使用来验证项是否为整数。

我们真的需要所有代码来调试吗?@Ev.Kounis我刚刚发布了这篇文章,以防万一,因为我真的不知道到底是什么导致了这个问题。是的,但是您认为有多少人愿意经历它?嗯,我很乐意把它缩短,如果我想知道我到底从这里剪了什么,我猜模板是可移动的,但是idk关于其他东西,告诉我们哪一行至少会引起错误怎么样??