所以我有这两个模型:
class Patient(models.Model):
patientID = models.CharField(max_length=200 , default='Enter PatientID')
age = models.IntegerField(default='-')
gender = models.CharField(max_length=200,choices=Gender_Choice, default='UNDEFINED')
class RiskFactor(models.Model):
patient = models.OneToOneField(Patient, on_delete=models.CASCADE)
hypertension = models.BooleanField(default=False)
diabetes = models.BooleanField(default=False)
PAVK = models.BooleanField(default=False)
nicotin = models.BooleanField(default=False)
因为原因,我已经从ForeignKey更改为OnetoOneField。因此,使用ForeignKey,一切都很容易,我可以在我的患者详细信息模板中显示RiskFactor模型的数据。现在我有问题需要更改查询。我只是不知道如何改变这个:
<ul>
{% for rfac in patient.riskfactor_set.all %}
<li>Hypertension: {{ rfac.hypertension }}<br/>
Diabetes: {{ rfac.diabetes }}<br/>
PAVK: {{ rfac.PAVK }}<br/>
Nicotin: {{ rfac.nicotin }}<br/>
</li>
{% endfor %}
</ul>
显示患有OneToOneRel的患者的风险因素数据。
感谢您的帮助!
答案 0 :(得分:0)
我会将related_name="risk_factor"
添加到您的OneToOneField声明中,只是为了更清楚地说明如何引用相关的RiskFactor。从那里,您可以像patient
的任何其他属性一样引用它 - 它不再是列表,而是单个对象。如下所示
<ul>
{% with patient.risk_factor as rfac %}
<li>Hypertension: {{ rfac.hypertension }}<br/>
Diabetes: {{ rfac.diabetes }}<br/>
PAVK: {{ rfac.PAVK }}<br/>
Nicotin: {{ rfac.nicotin }}<br/>
</li>
{% endwidth %}
</ul>
你可以不使用with
语句,但它最容易转换你的代码,然后你必须在你想要的每个属性之前放置patient.risk_factor.
,所以不妨将它保存到rfac
。
答案 1 :(得分:0)
您试图查询一组一对一的关系,这是不可能的。因为每个患者只能有1个RiskFactor。
为什么不根据患者获得风险因素并将其传递到模板中,如下所示:
patient_risk = RiskFactor.objects.get(patient=patient)
ctx = {
'rfac': patient_risk
}
然后在您的模板中,您可以获得特定患者的风险。
<ul>
<li>Hypertension: {{ rfac.hypertension }}<br/>
Diabetes: {{ rfac.diabetes }}<br/>
PAVK: {{ rfac.PAVK }}<br/>
Nicotin: {{ rfac.nicotin }}<br/>
</li>
</ul>
如果您希望循环所有拥有RiskFactors的患者,您还可以查询所有RiskFactors模型并通过RiskFactor.patient
访问患者。
all_risk_factors = RiskFactor.objects.all()
ctx = {
'risk_factors': all_risk_factors
}
<ul>
{% for risk in risk_factors %}
<li><strong>Patient ID: risk.patient.patientID</strong></li>
<li>Hypertension: {{ risk.hypertension }}<br/>
Diabetes: {{ risk.diabetes }}<br/>
PAVK: {{ risk.PAVK }}<br/>
Nicotin: {{ risk.nicotin }}<br/>
</li>
{% endfor %}
</ul>