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

Django中如何在POST表单数据中传递patient_id参数

嘿,我来帮你搞定这个问题!你现在的GET视图能顺利拿到patient_id,但POST提交表单时要获取这个ID,有几个实用的办法:

解决POST请求中获取patient_id的方案

方案1:在表单中添加隐藏字段

这是最直观的方式,把patient_id藏在表单里,提交时一起发过来。

首先修改你的表单类,添加一个隐藏字段:

class PatientCheckinForm(forms.Form):
    # 你的其他表单字段...
    patient_id = forms.IntegerField(widget=forms.HiddenInput())

然后在视图里处理GET和POST请求,给隐藏字段赋值并在提交后获取:

def Checkin(request, patient_id):
    patient = get_object_or_404(PatientInfo, pk=patient_id)
    if request.method == 'POST':
        form = forms.PatientCheckinForm(request.POST)
        if form.is_valid():
            # 从表单清洗后的数据中拿到patient_id
            submitted_patient_id = form.cleaned_data['patient_id']
            # 建议加个验证,防止恶意篡改ID
            if submitted_patient_id != patient_id:
                # 处理异常情况,比如返回错误页面
                return render(request, 'error.html', {'message': '无效的患者ID'})
            # 这里做签到数据的保存等操作
            return redirect('checkin_success')
    else:
        # GET请求时初始化表单,把patient_id填入隐藏字段
        form = forms.PatientCheckinForm(initial={'patient_id': patient_id})
    return render(request, 'patientRecords/checkin.html', {'patient': patient, 'form':form})

方案2:让POST请求直接指向带patient_id的URL

这种方式不需要修改表单,因为URL本身就包含了patient_id,不管GET还是POST,视图都能直接拿到这个参数。

假设你的URL配置是这样的:

path('checkin/<int:patient_id>/', views.Checkin, name='patient_checkin'),

那你的视图可以直接复用这个参数处理POST请求:

def Checkin(request, patient_id):
    patient = get_object_or_404(PatientInfo, pk=patient_id)
    if request.method == 'POST':
        form = forms.PatientCheckinForm(request.POST)
        if form.is_valid():
            # 直接用视图参数里的patient_id关联患者
            checkin_record = PatientCheckin(
                patient=patient,
                # 其他从表单获取的字段...
            )
            checkin_record.save()
            return redirect('checkin_success')
    else:
        form = forms.PatientCheckinForm()
    return render(request, 'patientRecords/checkin.html', {'patient': patient, 'form':form})

小提醒

  • 方案2更简洁,不需要修改表单结构,但要确保模板里的表单action属性指向正确的URL,比如用{% url 'patient_checkin' patient.id %}生成。
  • 不管用哪种方案,都要注意权限验证,确保当前用户有权操作该患者的签到记录,避免越权访问。

内容的提问来源于stack exchange,提问作者Tim B.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:33:02