Как найти количество пациентов и больниц в городе, используя значения (group by) в django

Я пытаюсь найти количество пациентов и больниц в городе: например:

пациенты: 13, больница: A, город: Лондон

пациенты: 20, больница: B, город: Нью-Касл

вот мой models.py

class City(models.Model):
    name = models.CharField(max_length=150)

def __str__(self):
    return self.name

class Hospital(models.Model):
    name = models.CharField(max_length=150)
    city = models.ForeignKey(City, on_delete=models.CASCADE, related_name="hospital")

    def __str__(self):
        return self.name

class Patient(models.Model):
    name = models.CharField(max_length=150)
    city = models.ForeignKey(City, on_delete=models.CASCADE, related_name="patients")
    hospital = models.ForeignKey(Hospital, on_delete=models.CASCADE, related_name="patients", blank=True, null=True)

вот мой запрос:

City.objects.values('name').annotate(patients_no=Count('patients__pk'),hospitals_no=Count('hospital__pk'))

но он суммирует количество пациентов с количеством больниц! есть ли способ достичь этого, пожалуйста.

мне нужно вернуть количество больниц в городе и количество пациентов в больнице, примечание: меня не волнует название больницы

Заранее спасибо.

Значит, вы хотите получить количество больниц в каждом городе, а также количество пациентов на одну больницу? Я думаю, вам следует сделать два разных запроса, поскольку это два разных несвязанных результата, если я правильно понял ваши намерения.

Что-то вроде

nb_patients_per_hospital = Hospital.objects.annotate(Count('patients__pk'))
nb_hospitals_per_city = City.objects.annotate(Count('hospitals__pk'))

Вернуться на верх