Заполнение выпадающего списка строками, но в форму нужно отправить целое число '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()
    )

Вернуться на верх