2016-09-23 8 views
0

このモデル構造からデータを取得するのにお手伝いできますか?私は今、何時間もこれをやるのに苦労しているからです。複数の直接関係からモデルインスタンスを取得する

まず私が持っているすべてのDoctorからすべての異なるSubSpecializationを取得したいと思いSpecialization.title

は、第二に、私は特定のSpecialization.titleを持っており、何のSubSpecializationを持っていないすべてのDoctorを取得したいと思い与えられました。ここで

これはDoctor関係はSpecializationSubSpecializationに接続されているモデルであるDoctorモデル

class Doctor(models.Model): 
    name = models.CharField(max_length=50) 
    room_no = models.IntegerField() 
    floor_no = models.IntegerField() 
    contact_no = models.CharField(max_length=50, blank=True, null=True) 
    notes = models.CharField(max_length=70, blank=True, null=True) 

です。

class DoctorSpecialization(models.Model): 
    doc = models.ForeignKey(Doctor, models.DO_NOTHING) 
    spec = models.ForeignKey('Specialization', models.DO_NOTHING) 

class DoctorSubSpecialization(models.Model): 
    doc = models.ForeignKey(Doctor, models.DO_NOTHING) 
    sub_spec = models.ForeignKey('SubSpecialization', models.DO_NOTHING) 

ここでは基準を作成します。

class Specialization(models.Model): 
    title = models.CharField(unique=True, max_length=45) 
    point = models.IntegerField() 

class SubSpecialization(models.Model): 
    title = models.CharField(max_length=100) 

は助けてくださいSpecializationSubSpecializationの間には直接の関係はありません。

+0

を「Doctor」と「Specialization」と「SubSpecialization」の関係を示している。 'DoctorSpecialization'と' DoctorSubpecialization'モデルの必要性は何ですか? –

+0

'Doctor'と' Specialization'/'Subspecialization'の間に' ManyToManyField'を直接使うことができます。 –

+0

@MuhammadSaeedArabiああそう、構造を指摘してくれてありがとう。 –

答えて

1

まず、専門化と準特殊化は、医師と多対多の関係になります。明示的に宣言し、他の情報を格納する必要がない限り、それらの介在モデルを削除する必要があります。

class Doctor(models.Model): 
    ... 
    specializations = models.ManyToManyField('Specialization') 
    subspecializations = models.ManyToManyField('SubSpecialization') 

今、あなたは、特定の専門分野を持っている医師のためのすべてのsubspecializationsを照会することができます

SubSpecialization.objects.filter(doctor__specialization__title='My Specialization') 

あなたの2番目のクエリは、専門とsubspecializationの間に関係がないという事実与えられた意味がありません、 「特定の専門分野でのサブスペシャライゼーションなし」という意味を明確にする必要があります。

編集

特定の専門を持っているし、その後無subspecializations全くの医師を見つけるために:あなたは、多対多を持ってしようとしている、私の知る限り理解し

Doctor.objects.filter(specialization__name="My Specialization", 
         subspecialization=None) 
+0

あなたのお返事ありがとうございます。与えられた 'Specialization.title'を持つ' Doctor'をすべて取得し、 'SubSpecialization'にレコード(' id')を持たない2番目のクエリを明確にしたいと思います。私はそれを明白に説明したいと思う。そして私はあなたの答えのために働いているので、お待ちください。 –

+0

これは最初の場所に正しい構造であると確信していますか?医師が1つのSpecializationを持っていて、その1つのSpecializationに関連する多くのSubSpecializationがあるように思えます。 –

+0

医者が複数の専門化と副次的な専門を持っているかもしれないので、私は思っていません。 –

関連する問題