2017-07-18 145 views
0

我想要的是選擇要保存並提交給數據庫的多選擇的選擇器選擇一個有效的選項。[<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

是的,但是你認爲有多少人會願意通過它? –

回答

0

你的領域就沒有任何意義。多對多的領域是模型之間的關係,每一方都可以有多個項目。它不是一系列選項中的一組項目。

您應該使用CommaSeparatedIntegerField,並使用validate_comma_separated_integer_list驗證項目是整數。

相關問題