选择一个有效的选择。 x不是可用选项之一

时间:2017-10-25 13:30:03

标签: python django forms

我知道这个问题已经在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"

据我所知,选择都是整数而不是字符。我在这里错过了什么?非常感谢所有帮助!

1 个答案:

答案 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(...))