Django:如何从两个表执行相关查询?

时间:2016-05-18 11:27:27

标签: python django django-models django-views

我在Demographic中有models.py表:

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)

出生国家/地区包含每个患者的国家/地区,例如。 '塞浦路斯'或'希腊'或'英国'或'罗马尼亚'或......

我还有Diagnosis表包含:

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

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

诊断选项包含每位患者的诊断,例如'地中海贫血'或'地中海贫血b'或'镰刀'或......

我想在views.py中创建相关查询。我想根据每个诊断选择出生国家的患者总数。

EG。塞浦路斯:

  1. 地中海贫血a:2名患者
  2. 地中海贫血症b:2名患者
  3. 罗马尼亚:

    1. 地中海贫血a:1名患者
    2. 镰刀:3名患者
    3. 您知道如何创建此查询吗?

2 个答案:

答案 0 :(得分:1)

如果我理解了你的问题,你需要正确地计算每个国家的每种疾病的数量。在这种情况下,以下查询应该这样做。

from django.db.models import Count

Diagnosis.objects.values(
                         'diagnosis_option','patient__country_of_birth'
                        ).annotate(c = Count('diagnosis_option'))

答案 1 :(得分:0)

我希望在ORM查询下面会给出每个country_of_birth每个诊断选项的患者数量。

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