我知道这个问题已经在Stackoverflow上已经被问了十几次,但是我已经完成了所有这些问题并且他们没有解决我的问题。通常,当模型字段为整数时,它们中的大多数与作为字符的选择相关,反之亦然。但这是我的情况
我正在开发Django服务台,这是一个基于开源django的票务平台,可以在这里找到:https://github.com/django-helpdesk/django-helpdesk
我对其公共票据提交的forms.py进行了一些更改,它一直在工作,直到我最近添加了一个新队列。
Forms.py
class PublicTicketForm(CustomFieldMixin, forms.Form):
queue = forms.ChoiceField(
widget=forms.Select(attrs={'class': 'form-control'}),
label=_('Queue'),
required=True,
choices=()
)
因此,当调用
时,此表单将在视图中填充选项form = PublicTicketForm(initial=initial_data)
form.fields['queue'].choices = [(q.id, q.title) for q in Queue.objects.filter(allow_public_submission=True)] + \
[('', 'Other')] #I'm thinking this line may be the problem here
return render(request, 'helpdesk/public_homepage.html', {
'form': form,
'helpdesk_settings': helpdesk_settings,
})
以下是form.fields['queue'].choices
打印的内容:
[(6L,u'Account'),(7L,u'Support'),(4L,u'Orders'),(5L, u'Products'),(8L,u'Request'),(你',你'其他')]
因此,每当我选择一个队列并提交时,表单将不会提交,并且会向我发出此错误。
"Not one of the available choices"
据我所知,选择都是整数而不是字符。我在这里错过了什么?非常感谢所有帮助!
答案 0 :(得分:0)
我的猜测是您正在为GET请求设置选项,但在验证表单数据时不会为POST请求设置选项。您可以通过将设置选项的代码移动到表单的__init__
方法中来避免此问题。本身。
class PublicTicketForm(CustomFieldMixin, forms.Form):
queue = forms.ChoiceField(
widget=forms.Select(attrs={'class': 'form-control'}),
label=_('Queue'),
required=True,
choices=()
)
def __init__(self, *args, **kwargs):
super(PublicTicketForm, self).__init__(*args, **kwargs)
self.fields['queue'].choices = [(q.id, q.title) for q in Queue.objects.filter(allow_public_submission=True)] + [('', 'Other')]
请注意,使用ModelChoiceField
:
class PublicTicketForm(CustomFieldMixin, forms.Form):
queue = forms.ModelChoiceField(queryset=Queue.objects.filter(...))