PythonDjango:将动态表单记录插入数据库



这是一个医学实验室软件解决方案。用户提出的实验室调查请求是患者遇到的唯一请求,即患者每次遇到可以有一个或多个请求。这种唯一性由encounter_id表示。现在的挑战是能否将结果发送回请求者。

我可以在模板上显示每个encounter_id的所有请求,但无法返回结果,因为每个结果都与特定的调查有关。这主要是因为我对JS的了解有限。我目前的方法只能提交一条记录,通常是最后一条记录

以下是显示结果模板的URL:https://smart-care.herokuapp.com/labs/lab_results/1/

这是django模板:

<div class="container">
<form id="myForm" method="POST" action="">{% csrf_token %}
{% for request in lab_request %}
{{ request.test }}: <input type="text" class="result" id="{{ request.test.id }}" name="test_id"> <br>
{% endfor %} 
<br><br>
<button>Send Result</button>
</form>
</div>
# Here’s my view:
def lab_results_view(request, enc_id):
lab_request = LabRequest.objects.filter(encounter_id=enc_id, done=False, decline=False)
if request.POST.get('test_id'):
for req_id in request.POST:
results = request.POST.get(req_id, False)
print("results = ",results)
template = "labs/lab_results.html"
context = {"lab_request":lab_request}
return render(request, template, context)

型号:

class LabRequest(models.Model):
encounter = models.ForeignKey(PatientEncounter, on_delete=models.CASCADE, blank=True, null=True)
patient          = models.ForeignKey(Patient, on_delete=models.CASCADE, blank=True, null=True)
test             = models.ForeignKey(LabTest, on_delete=models.CASCADE)
accepted         = models.BooleanField(default=False)
decline          = models.BooleanField(default=False)
done             = models.BooleanField(default=False)
created_by       = models.ForeignKey(User, on_delete=models.CASCADE, blank=True, null=True)
date_created     = models.DateTimeField(auto_now_add=True, auto_now=False)
updated          = models.DateTimeField(auto_now_add=False, auto_now=True)
def __str__(self):
return str(self.patient.id)

class LabResult(models.Model):
lab_request   = models.ForeignKey(LabRequest, on_delete=models.CASCADE, blank=True, null=True)
result        = models.CharField(max_length=225)
created_by    = models.ForeignKey(User, on_delete=models.CASCADE, blank=True, null=True)
date_created  = models.DateTimeField(auto_now_add=True, auto_now=False)
updated       = models.DateTimeField(auto_now_add=False, auto_now=True)
def __str__(self):
return str(self.result)

谢谢,我期待你的友好回应。

Django处理表单元素的问题是基于name属性而不是id属性,因此这意味着您需要更改每个请求的名称,并且在视图端循环请求中的所有键。类似POST的
for req_id in request.POST:
result = Request.POST[req_id]

编辑:用于模板

<div class="container">
<form id="myForm" method="POST" action="">{% csrf_token %} 
{% for request in lab_request %}
{{ request.test }}: <input type="text" class="result" id="{{ request.test.id }}" name="{{ request.test.id }}"> 
<br> {% endfor %} <br><br>
<button>Send Result</button>
</form> </div>

第2版:视图应该像这个

def lab_results_view(request, enc_id):
lab_request = LabRequest.objects.filter(encounter_id=enc_id, done=False, decline=False)
if request.method == "POST":
for req_id in request.POST:
results = request.POST.get(req_id)
print("results = ",results)
template = "labs/lab_results.html"
context = {"lab_request":lab_request}
return render(request, template, context)

最新更新