You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 15:25:39