选择一个有效的选项。[]不是可用选项之一。错误

问题描述:

我想要的是选择要保存并提交给数据库的多选择的选择器选择一个有效的选项。[<selection>]不是可用选项之一。错误

但是,我在每个问题上都得到了这个错误。

我的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='') 

这里我用M2Mfield,因为我们储存多个项目,并使用同一model('self')

modelform.py

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

我试着用__init__这样做,是没有帮助。此时我迷路了。

views.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']等,也没有工作。

我知道我可以使用多选字段库,但这对我的数据库不利,因为存储多个实例并不是一个好主意。 我看到有相当多的类似错误,但他们都没有帮助我:/ 将非常感谢您的帮助!谢谢!

错误error

+0

我们真的需要*所有代码*来调试吗? –

+0

@ Ev.Kounis我刚刚发布了这个以防万一,因为我无法弄清楚到底是什么导致问题 – pyjka

+0

是的,但是你认为有多少人会愿意通过它? –

你的领域就没有任何意义。多对多的领域是模型之间的关系,每一方都可以有多个项目。它不是一系列选项中的一组项目。

您应该使用CommaSeparatedIntegerField,并使用validate_comma_separated_integer_list验证项目是整数。