Django多按钮投票表单:如何从POST请求获取候选人ID
要实现这个需求很简单,你需要修改按钮的HTML属性,让它能把候选人ID随POST请求提交,具体步骤如下:
1. 修改模板中的按钮代码
原来的按钮只有id属性,这个属性是给前端DOM操作用的,不会被表单提交到后端。你需要给按钮加上name和value属性:
name设为一个固定值(比如vote_for),用来在后端识别这个参数value设为候选人的唯一ID,这样点击对应按钮时,这个ID就会被提交
如果是用Django模板循环渲染候选人列表,代码大概是这样:
<form method="post"> {% csrf_token %} <!-- 必须加,否则Django会拦截POST请求 --> <table> {% for candidate in candidates %} <tr> <td>{{ candidate.name }}</td> <td>{{ candidate.campaign_promises }}</td> <td><button type="submit" name="vote_for" value="{{ candidate.id }}">投票</button></td> </tr> {% endfor %} </table> </form>
注意要给按钮加上type="submit",明确它是提交按钮(有些浏览器默认就是,但显式写更稳妥)。
2. 在Django视图中获取候选人ID
后端视图里,直接通过request.POST.get('vote_for')就能拿到选中的候选人ID:
from django.shortcuts import render, redirect def vote_view(request): if request.method == 'POST': # 获取提交的候选人ID,转成整数更稳妥 candidate_id = request.POST.get('vote_for') if candidate_id: try: candidate_id = int(candidate_id) # 这里写你的投票逻辑,比如更新候选人得票数、记录投票记录等 # 示例: # from .models import Candidate # candidate = Candidate.objects.get(id=candidate_id) # candidate.votes += 1 # candidate.save() return redirect('vote_success') # 投票成功后跳转页面 except ValueError: # 处理ID不是有效数字的情况 pass # GET请求时渲染投票页面 candidates = Candidate.objects.all() return render(request, 'vote.html', {'candidates': candidates})
这样就可以通过request.POST.get('vote_for')简单拿到选中的候选人ID了。
内容的提问来源于stack exchange,提问作者Pat
相关产品推荐
相关产品推荐

