Заполнение выпадающего списка строками, но в форму нужно отправить целое число 'id'
У меня есть Django форма, где одно из полей selected_candidate представляет собой выпадающее меню кандидатов, существующих в выборах/голосовании. В настоящее время поле является ChoiceField, потому что когда я использую и IntegerField, выпадающее меню не заполняется.
Здесь vote функция
def vote(request, id):
election_to_vote = elections[id]
candidates_to_vote = ()
for i in range(len(candidates)):
if candidates[i][3] == id:
candidates_to_vote += ((candidates[i][0], candidates[i][1]), )
if request.method == 'POST':
form = VoteForm(request.POST)
if form.is_valid():
data = form.cleaned_data
pps = request.POST.get('user_pps')
cand = request.POST.get('selected_candidate')
context = {
'form':form
}
return render(request, 'vote/test.html', context)
else:
form = VoteForm()
form.fields['selected_candidate'].choices = [(c[0], c[1]) for c in candidates_to_vote]
context = {
'form': form,
'election': election_to_vote,
'candidates': candidates_to_vote
}
return render(request, 'vote/vote.html', context)
Я никогда не могу передать оператор form.is_valid(). Оно выдает мне следующую ошибку:
selected_candidate: Select a valid choice. 0 is not one of the available choices.
Я знаю, что это происходит потому, что я передаю id, связанный с кандидатом, но заполняю список именем кандидата, которое является строкой, но я не уверен, как именно я могу заполнить список строкой, но отправить ID кандидата, который является int в POST запросе.
Вот мой forms.py.
from django import forms
class VoteForm(forms.Form):
user_pps = forms.CharField(
label='Your PPS Number',
max_length=8,
required=True
)
selected_candidate = forms.ChoiceField(
label="Select your preferred candidate",
required=True,
widget=forms.Select()
)