私はこの質問が既にStackoverflowで何十回も尋ねられてきたことは知っていますが、私はそれらのすべてを通して経験しています。通常、それらの大部分は、モデルフィールドが整数の場合は文字である選択肢に、その逆の場合は選択肢に関連します。しかし、これは私の状況です有効な選択肢を選択してください。 xは利用可能な選択肢の1つではありません
私は、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は、 (8L、u'Request ')、(u'Account')、(7L、u'Support ')、(4L、u'Orders')、(5L、 u'Products ' 'その他')]
したがって、キューを選択して送信すると、フォームは送信されず、このエラーが表示されます。
"Not one of the available choices"
私の知る限り、選択肢はすべて整数であり、文字ではありません。私はここで何が欠けていますか?すべての助けが大いに評価されるでしょう!
なぜIDが '6L'、' 7L'などと印刷されていますか? 'L 'はどういう意味ですか? 'Queue.id'はどんなタイプですか? –
Lは長整数型を意味すると思います。 'type(q.id)'を実行すると、 'Long'と表示されます – DeA
Python 2を使用する特別な理由はありますか? FWIWは、Python 3では、 'int'と' long'が改良された 'int'型に統一されました。 –