我正在尝试实现一个包含字段复选框选项的表单,用户可以为表单中的特定字段选择多个复选框,并且所有检查标记的值都应该在POST请求中发送。
但views.py
表示当我尝试提交表单时表单无效。它无效的原因是Select a valid choice. ['top', 'mid'] is not one of the available choices.
当我只选择一个复选框时,我收到类似的错误。
这是我的部分models.py
from django.db import models
LEAGUE_ROLES = (
('top','Top'),
('mid','Mid'),
('jungle','Jungle'),
('bottom','Bottom/ADC'),
('support','Support'),
)
class CreatePosting(models.Model)
createPostingOpenRoles = models.CharField(max_length = 10, choices=LEAGUE_ROLES, default=None)
def __str__(self): # __unicode__ on Python 2
return self.title
这是我的部分forms.py
class TeamPostingCreateForm(ModelForm):
class Meta:
model = CreatePosting
widgets = {
'createPostingOpenRoles': forms.CheckboxSelectMultiple(),
}
fields = '__all__'
def __init__(self, *args, **kwargs):
super(TeamPostingCreateForm, self).__init__(*args, **kwargs)
这是我的部分views.py
def createposting(request):
UserTeamPostingCreateForm = TeamPostingCreateForm()
if request.method == "POST":
UserTeamPostingCreateForm = TeamPostingCreateForm(request.POST)
if UserTeamPostingCreateForm.is_valid():
logger.error("valid form")
else:
#print form error
logger.error(UserTeamPostingCreateForm.errors)
variables = { 'form': UserTeamPostingCreateForm }
return render(request, 'createposting.html', variables)
在我的模板中,我将其用于表单字段
{{ form.createPostingOpenRoles }}
如果您需要更多代码,请与我们联系。 我试着研究解决方案,但没有什么对我有用。
感谢您的帮助,谢谢
更新
所以我打印出views.py
将使用此
logger.error(UserTeamPostingCreateForm.fields['createPostingOpenRoles'].choices)
我得到了这个输出
[('top', 'Top'), ('mid', 'Mid'), ('jungle', 'Jungle'), ('bottom', 'Bottom/ADC'), ('support', 'Support')]
然后,当我提交带有复选框'Top'和'Mid'的表单时,我认为这是一个无效的表单,因为:
Select a valid choice. ['top', 'mid'] is not one of the available choices.
答案 0 :(得分:0)
这是因为您尝试将两个文本值的列表传递到CharField
。列表(显而易见的原因)是CharField
的无效选择。如果您想允许多个选项,请考虑使用JSONField
(仅限postgres)或MultipleChoiceField
。
MultipleChoiceField定义类似于
createPostingOpenRoles = models.MultipleChoiceField(choices=LEAGUE_ROLES)
"空" MultipleChoiceField的值是一个空列表([]
)