2016-05-18 12 views
1

Ich habe Demographic Tabelle in models.py:Django: Wie korrelierte Abfrage aus zwei Tabellen durchführen?

class Demographic(models.Model): 
    patient_id = models.IntegerField(unique= True ,primary_key=True) 
    country_of_birth = models.CharField(max_length=30,null=True,blank=True) 

    def __str__(self): 
     return str(self.patient_id) 

Geburtsland enthält für jeden Patienten ein Land, zum Beispiel. ‚Zypern‘ oder ‚Griechenland‘ oder ‚UK‘ oder ‚Rumänien‘ oder ...

Auch habe ich Diagnosis Tabelle, die enthält:

class Diagnosis(models.Model): 
    diagnosis_option = models.CharField(max_length=150) 
    patient = models.ForeignKey(Demographic) 

    def __str__(self): 
     return str(self.patient) 

Diagnose Option, um eine Diagnose für jeden Patienten enthält z.B. 'Thalassämie a' oder 'Thalassämie b' oder 'Sichel' oder ...

Ich möchte eine korrelierte Abfrage in views.py erstellen. Ich möchte die Gesamtzahl der Patienten nach Geburtsland pro Diagnosemöglichkeit erhalten.

Eg. Zypern:

  1. Thalassämie a: 2 Patienten
  2. Thalassämie b: 2 Patienten

Rumänien:

  1. Thalassämie a: 1 Patient
  2. Sickle: 3 Patienten

Wissen Sie, wie Sie diese Abfrage erstellen?

+0

Sind Instanzen des 'Demographic' Modells die gleichen wie" Patienten "? (Wenn ja, warum heißt das Modell nicht 'Patient'?) Ihre Modelle erlauben nur eine einzige' Demographische' nach 'Diagnose', so dass Sie nicht einmal die gesuchten Daten darstellen, geschweige denn abfragen können. –

+0

@SvenMarnach 'Demographic' enthält die demografischen Daten für jeden Patienten, daher enthält es viel mehr Felder! – zinon

+0

Wenn die demografische Tabelle demographische Daten für Patienten enthält, sollte patient_id ein Primärschlüssel dafür sein? Es sollte idealerweise ein Fremdschlüssel für den Patiententisch sein. Zu diesem Zeitpunkt wäre es am besten, wenn Sie Ihre Modelle veröffentlichen könnten. – e4c5

Antwort

1

Wenn ich Ihre Frage richtig verstanden habe, wollen Sie die Anzahl der Krankheiten für jedes Land. In diesem Fall sollte die folgende Abfrage es tun.

+0

Großartig! Das ist es! Vielen Dank! – zinon

+0

Froh, geholfen zu haben – e4c5

+0

'diagnose_option' kann mehr als eine Option enthalten, zB '[u'b-Thalassämie-Syndrome','Sickle-Zellen-Syndrome ']]'. In diesem Fall möchte ich getrennt' b "Thalassämiesyndrome" und "Sichelzellsyndrome" und nicht als eine Option. Ist das möglich? – zinon

0

Ich hoffe unten ORM Abfrage gibt Ihnen die Anzahl der Patienten pro Land der Geburt je Diagnoseoption.

from django.db.models import Count 
Diagnosis.objects.values('patient__country_of_birth', 'diagnosis_option').annotate(patient_count=Count('id')) 
Verwandte Themen