python - 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.
解决方案
如果您必须离开CorporationRequest.days
,CharField
那么您可以将日期选择保存为字段中的逗号分隔字符串
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(',')
推荐阅读
- xml - 如何使用 Groovy 获取 soapUI 配置设置
- azure - Azure Active Directory easy auth /.auth/me 的权限错误返回 401
- python-3.x - Flask App 模拟阻塞 API 以从基于 Web 挂钩的回调中抽象出来
- c - CMake 无法在 Windows 上创建 MakeFile
- javascript - ReactJS 中的 Zip 文件下载
- r - 为列表中的每个元素提取残差序列
- android - 在 Kotlin 中退出应用程序后如何保存变量
- firebase - 为什么我仍然可以通过浏览器打开存储在 Firebase 存储中的图像,即使它有规则?
- android - 没有这样的提供者:SunJCE--Paytm Checksum generator Android
- php - 如何使用 ajax 更改结帐端点 /order-price/woocommerce 中的价格?