我想要的是选择保存并提交给DB
的多选择的anwsers但是我在每个问题上都会收到此错误。
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='')
我在这里使用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']
等,也没有工作。
我知道我可以使用 multiselectfield 库,但这对我的数据库来说很糟糕,因为存储多个实例并不是一个好主意。 我看到有很多类似的错误,但没有一个帮助我:/ 非常感谢您的帮助!谢谢!
答案 0 :(得分:0)
你的领域毫无意义。多对多字段是模型之间的关系,其中每一方可以具有多个项目。它不是选项列表中的一组项目。
您应该使用CommaSeparatedIntegerField和validate_comma_separated_integer_list
来验证项目是否为整数。