【问题标题】:Passing value along with form in POST data in Django在 Django 的 POST 数据中与表单一起传递值
【发布时间】:2018-03-26 01:27:19
【问题描述】:

当我在 HTML 中呈现表单时,我使用这个视图。 patient_id 用于表示签到的患者和姓名显示等。

def Checkin(request, patient_id):
    patient = get_object_or_404(PatientInfo, pk=patient_id)
    form = forms.PatientCheckinForm()
    return render(request, 'patientRecords/checkin.html', {'patient': patient, 'form':form})

当我提交以 POST 方法填写的患者表格时,我仍然需要访问 patient_id。目前这是接受已填写表单的视图:

def CheckinSubmit(request):
if request.method == 'POST':
    form = forms.PatientCheckinForm(request.POST, request.FILES)
    if form.is_valid():
        instance = form.save(commit=False)
        instance.date_time_of_checkin = dt.now()
        instance.patient = patient.patient_id
        instance.save()
        return redirect('patientRecords/index.html')

我想将 instance.patient 设置为来自 Checkin 视图的患者的一部分的 patient_id。有没有办法将患者数据与 POST 方法一起传回,或者有其他方法可以做到这一点?

作为参考,这是我的模板,我使用的是 ModelForm 而不是表单。

{% block content %}

<div class="container">
  <h1>Patient Checkin</h1>
  <h2>{{patient.first_name}} {{patient.last_name}}</h2>
</div>
<div class="container">
  <form  action="{% url 'patientRecords:checkinsubmit' %}" method="POST" class="form">
    {% csrf_token %}
    {% bootstrap_form form %}
    {% buttons %}
        <button type="submit" class="btn btn-primary">Submit</button>
    {% endbuttons %}
  </form>
</div>

{% endblock %}

提前致谢!

【问题讨论】:

    标签: python django


    【解决方案1】:

    您应该能够简单地在表单中添加一个隐藏的输入来捕获患者 ID:

    {% block content %}
    
    <div class="container">
      <h1>Patient Checkin</h1>
      <h2>{{patient.first_name}} {{patient.last_name}}</h2>
    </div>
    <div class="container">
      <form  action="{% url 'patientRecords:checkinsubmit' %}" method="POST" class="form">
        <input type="hidden" name="patient_id" value="{{patient.patient_id}}" />
        {% csrf_token %}
        {% bootstrap_form form %}
        {% buttons %}
            <button type="submit" class="btn btn-primary">Submit</button>
        {% endbuttons %}
      </form>
    </div>
    
    {% endblock %}
    

    (请注意,这里假设患者 ID 可以从 patient 对象的 patient_id 属性访问。)

    然后,在您的CheckinSubmit 方法中,您可以通过request.POST.get('patient_id') 访问此值

    另外,您的登记表似乎在 URL 中加载了患者 ID。在您的CheckinSubmit 方法中,您应该能够通过request.META.HTTP_REFERER 属性访问此URL。然后,您可以解析 URL(例如,使用 request.META.HTTP_REFERER.split('/')[len(request.META.HTTP_REFERER.split('/')) - 1] 提取患者 ID。

    【讨论】:

    • 越来越近了!现在不同的错误。我收到“ValueError:无法分配“'15'”:“CheckIn.patient_id”必须是“PatientInfo”实例”错误。 “PatientInfo”是与我当前尝试保存的模型不同的模型的名称。 15 将作为“PatientInfo”的外键进入“checkin”模型。
    • 从错误判断,patient 属性需要一个对象(PatientInfo 类型),而不是整数/ID。因此,在您的CheckinSubmit 方法中,您需要使用ID 从数据库中提取该对象以进行查找,然后将其分配给instance.patient。例如,假设您将应用模型导入到视图文件中,您可能会将其拉入,并将其分配给 instance.patient,如下所示:instance.patient = models.PatientInfo.objects.get(pk=request.POST.get('patient_id'))
    【解决方案2】:

    例子

    <form method="post" action = "{% url 'user_search_from_group' %}"> 
          <div class="module-option clearfix">
               <div class="input-append pull-left">
                    <input type="hidden" name="groupname" value="{{ gpname }}" />
                    {% csrf_token %}
                    <input type="text" class="span3" placeholder="Filter by name" id="username3" name="username3" required>
                     <button type="submit" class="btn" name="submit">
                             <i class="icon-search"></i>
                     </button>
               </div>
          </div>
    </form>
    

    这里使用一个隐藏字段来传递一个值。

    def user_search_from_group(request):
        if request.method == 'POST':
            username3 = request.POST.get('username3')
            gname = request.POST.get('groupname')
    

    使用请求我们使用视图内的值

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-04-21
      • 2012-11-02
      • 2021-10-23
      • 2019-09-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多