0
私はdjangoで新しいです。Python Djangoセッション
私はこの投票アプリケーションを持っています。投票ごとにセッションごとに1票を選んで有権者を制限したいと思います。例:
投票1位
ポーリング#2
私はそれが私が投票第1位に投票することはできませんが、私はポール#2のために投票することができます後、#1をポーリングするために投票します。
だから私は、ポーリングIDをリストに入れてそこにあるかどうかをチェックすることにしました。私は投票ボタンこれで私を助けることができる
誰をクリックした後に、このエラーが要求されます
KeyError at /polls/3/vote/
'has_voted'
:
poll_list = [] #declare the poll_list variable
@login_required
@never_cache
def vote(request, poll_id):
global poll_list #declare it as global
p = get_object_or_404(Poll, pk=poll_id)
try:
selected_choice = p.choice_set.get(pk=request.POST['choice'])
except (KeyError, Choice.DoesNotExist):
return render_to_response('polls/detail.html', {
'poll': p,
'error_message': "You didn't select a choice.",
}, context_instance=RequestContext(request))
else:
if poll_id in request.session['has_voted']: #here is the checking happens
return HttpResponse("You've already voted.")
selected_choice.votes += 1
selected_choice.save()
poll_list.append(poll_id) #i append the poll_id
request.session['has_voted'] = poll_list #pass to a session
return HttpResponseRedirect(reverse('poll_results', args=(p.id,)))
return HttpResponse("You're voting on poll %s." % poll_id)
私はエラーを得ましたか?あなたは、まだ投票していない場合は
'has_voted'
キーが欠落しているので、あなたはKeyError例外を取得するよう
おかげで、 ジャスティン
グローバルな 'poll_list'はうまくいかないことに注意してください。本番環境で複数のdjangoプロセスを実行すると、それぞれが独自のバージョンのリストを持ちます。たとえば、ポーリングをデータベースに貼り付けるのがベストです。 –
どうすればいいですか?助けてください。 – justin
実際、あなたのコードを少し読めば、グローバルなpoll_listは必要ありません。メソッドの開始時に 'poll_list = request.session.get( 'has_voted'、[])'を実行します。セッションは、そのセッションを保存する場所です。実際にセッションごとにグローバルに追跡する必要はありません。 –