2016-12-22 8 views
0

ので、私は、この二つのモデルがあります:OnetoOneField Djangoのクエリ

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) 

だから私は理由の理由のOnetoOneFieldへのForeignKeyから変更しました。だから、ForeignKeyはすべてが簡単で、私のPatientの詳細テンプレートにRiskFactorモデルのデータを表示できます。今私は、クエリを変更するための問題があります。私はこれを変更する方法がわからない:STHに

<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の患者からriskfactorデータを示しています。

ありがとうございました!

答えて

0

関連するRiskFactorを参照する方法を明確にするために、私はOneToOneField宣言にrelated_name="risk_factor"を追加します。そこから、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に保存しテースト。

+0

が機能しました。どうもありがとう! – Boerne

+0

問題ありません!投票してください! –

0

1対1の関係のセットを照会しようとしましたができません。すべての患者は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> 
+0

あなたの方法は私には正当なようですが、私はちょうどDjangoに全く新しいので、どこにあなたがpatient_riskとctxの定義を入れているのか分かりません。 – Boerne

+0

テンプレートでは 'patient'にアクセスできるので、' patient.riskfactor 'を実行することができます。それはコンテキストと呼ばれ、レンダリングするためにテンプレートに渡した変数です。 Djangoテンプレートコンテキストの詳細については、[テンプレートドキュメント](https://docs.djangoproject.com/ja/1.10/ref/templates/api/)を参照してください。 –

関連する問題