【发布时间】:2021-09-15 02:41:29
【问题描述】:
我有一个名为Package 的模型。它有名为diagnosis、treatment、patient_type、max_fractions 和total_package 的字段。字段diagnosis、treatment 和patient_type 具有在单独的单独类中定义的外键,使得diagnosis、treatment 和patient_type 选择字段。现在我想要的是在选择treatment 和patient_type 时自动填充max_fractions 和total_package 字段。有人建议我使用 JavaScript 来实现这一点。我尝试并编写了代码,但无济于事。我首先在max_fractions 字段上进行尝试,当我成功时,我会为所有需要的字段进行此操作。
谁能帮帮我,不胜感激。
这是我的模型:
class Diagnosis(models.Model):
diagnosis=models.CharField(max_length=30, blank=True)
def __str__(self):
return self.diagnosis
class Treatment(models.Model):
treatment=models.CharField(max_length=15, blank=True)
def __str__(self):
return self.treatment
class PatientType(models.Model):
patient_type=models.CharField(max_length=15, blank=True)
def __str__(self):
return self.patient_type
class Package(models.Model):
rt_number=ForeignKey(Patient, on_delete=CASCADE)
diagnosis=models.ForeignKey(Diagnosis, on_delete=CASCADE)
treatment=ForeignKey(Treatment, on_delete=CASCADE)
patient_type=ForeignKey(PatientType, on_delete=CASCADE)
max_fractions=models.IntegerField(default=None)
total_package=models.DecimalField(max_digits=10, decimal_places=2)
forms.py:
class DiagnosisForm(ModelForm):
class Meta:
model=Diagnosis
fields='__all__'
class TreatmentForm(ModelForm):
class Meta:
model=Treatment
fields='__all__'
class PatientTypeForm(ModelForm):
class Meta:
model=PatientType
fields='__all__'
class PackageForm(ModelForm):
class Meta:
model=Package
fields='__all__'
widgets={
"treatment" : forms.Select(attrs={"onmouseup":"mf();"}),
"patient_type" : forms.Select(attrs={"onmouseup":"mf();"}),
}
views.py:
def package_view(request):
if request.method=='POST':
fm_package=PackageForm(request.POST)
fm_diagnosis=DiagnosisForm(request.POST)
fm_treatment=TreatmentForm(request.POST)
fm_patient_type=PatientTypeForm(request.POST)
if fm_package.is_valid() and fm_diagnosis.is_valid() and fm_treatment.is_valid() and fm_patient_type.is_valid():
diagnosis=fm_diagnosis.save()
treatment=fm_treatment.save()
patient_type=fm_patient_type.save()
package=fm_package.save(False)
package.diagnosis=diagnosis
package.treatment=treatment
package.patient_type=patient_type
package.save()
fm_package=PackageForm()
fm_diagnosis=DiagnosisForm()
fm_treatment=TreatmentForm()
fm_patient_type=PatientTypeForm()
return render (request, 'account/package.html', {'form2':fm_diagnosis, 'form3':fm_treatment, 'form4':fm_patient_type, 'form5':fm_package})
else:
fm_package=PackageForm()
fm_diagnosis=DiagnosisForm()
fm_treatment=TreatmentForm()
fm_patient_type=PatientTypeForm()
return render (request, 'account/package.html', {'form2':fm_diagnosis, 'form3':fm_treatment, 'form4':fm_patient_type, 'form5':fm_package})
JavaScript:
function mf(){
tt=document.getElementById("id_treatment").value;
ptt=document.getElementById("id_patient_type").value;
if (tt=="YEO5" && ptt=="RUHPE")
document.getElementById("id_max_fractions").value=40;
else if (tt=="D4EG" && ptt=="KILEU")
document.getElementById("id_max_fractions").value=40;
else if (tt=="5GED" && ptt=="IMRA")
document.getElementById("id_max_fractions").value=40;
}
模板:
<!DOCTYPE html>
{% load static %}
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<script src="{% static 'account/js/myjs.js' %}"></script>
<title>Package Form</title>
</head>
<body>
<form action="" method="post" novalidate>
{% csrf_token %}
{{form2.as_p}}
{{form3.as_p}}
{{form4.as_p}}
{{form5.as_p}}
<input type="submit" value="Submit">
</form>
</body>
</html>
网址:
path('package/', views.package_view),
编辑:
我刚刚在模板的源页面中注意到 treatment 和 patient_type 字段是下拉字段,它具有 select 和 option 标签。在option 标记中,值包含自动递增的数字(因为它是外键绑定字段),而不是我作为文本输入的等效值。我在这里有什么选择?
<p><label for="id_package_form-treatment">Treatment:</label> <select name="package_form-treatment" required id="id_package_form-treatment">
<option value="" selected>---------</option>
<option value="1">YEO5</option>
<option value="2">2DRT</option>
<option value="3">D4EG</option>
<option value="4">5GED</option>
<option value="5"></option>
</select></p>
<p><label for="id_package_form-patient_type">Patient type:</label> <select name="package_form-patient_type" required id="id_package_form-patient_type">
<option value="" selected>---------</option>
<option value="1">RUHPE</option>
<option value="2">KILEU</option>
<option value="3">IMRA</option>
<option value="5"></option>
</select></p>
【问题讨论】:
标签: javascript html python-3.x django django-models