2017-01-18 2 views
2

私は現在Djangoモデルについて学んでいます。ここに私の現在の状況があります。私は今ここに3つのモデルDjango:1つのモデルに2つの外部キーがあります。この場合、これは正しいアプローチです

1-Patient_Names 
2-Patient_Responses 
3-Doctor_Questions 

がモデルPatient_Namesで表される複数の患者が存在することになる関係がある持っています。今では、各患者は、医師からの質問に対して特定の応答を有するであろう。これらの応答は、モデルPatient_Responsesによって表される。このため、Patient_Responsesモデルには、Patient_NamesモデルのforeignKeyフィールドがあります。応答はモデルDoctor_Questionsの質問に対応するため、Patient_ResponseにはモデルDoctor_QuestionsのforeignKeyという別のフィールドがあります。これは正しいアプローチですか?モデルに2つの外部キーがありますか?あなたが実際にここで作成した何

Patient_Names     Doctor_Questions 
    |         | 
    |---------Patient_Responses -------|  
       | 
       pname = models.ForeignKey(Patient_Names) 
       doctor_questions = models.ForeignKey(Doctor_Questions) 
+0

としてそれを宣言することでManyToManyFieldsの利益のロックを解除することができ、常に同じDoctor_Questionsていますか?そして、これは絶対に理にかなっています。モデルに複数のForeignKeyがあることがよくあります。 –

+0

doctor_questionsは、医師が質問するかもしれない質問のリストです。 –

+0

アプローチはOKです。モデルは、異なるForeignKeysとM2Mフィールドを持つことができます。続行し、テストデータベースを作成して、それがどのように連携するかを確認してください! –

答えて

1

は、多くの関係に多くあるとDjangoでそれがManyToManyField

ケース1、Patient_Responses持っている唯一の2つの外部キーをサポートしています。

このモデルは不要です。単純にそれを削除し、コードを簡素化するために、このフィールド

class Patient_Names(models.Model): 
    ... 
    questions = models.ManyToManyField(Doctor_Questions) 

ケース2が提供する一連の機能にアクセスするために、残りのモデルの一つ上のManyToManyFieldを追加し、Patient_Responsesは、2つの外部キー以外のフィールドがあります。

今、あなたはPatient_Responsesモデルを削除することはできませんが、あなたはまだモデル

を通じて
questions = models.ManyToManyField(Doctor_Questions, through='Patient_Responses') 
+0

ありがとうございます。私はManyToManyFieldをよく知っていません。私のケースでは他のフィールドがあるので、ケース2に行ってください。Doctor_QuestionsとPatient_Namesのインスタンスを持っているときに、Patient_Responsesからレコードを取得したい場合、クエリがどのように表示されるか教えてください。 –

+0

あなたはそれぞれの1つを持っていますか? – e4c5

+0

私はDoctor_QuestionsのモデルのインスタンスとPatient_Namesモデルのインスタンスを持っています。関係がManyToManyFieldである場合、対応するPatient_Responsesを取得するには、他のフィールド(ケース2)を持つPatient_Responsesに別のモデルがあると仮定します。 –

関連する問題