Django: Обеспечьте подсчет для связанных полей модели

Я пытаюсь разработать API, который бы предоставлял мне подробную информацию обо всех моделях в базе данных с их полями и другими статистическими данными/количеством.

Это две связанные модели:

class Subject(models.Model):
  name = models.CharField()

class Student(models.Model):
  name = models.CharField()
  join_year = models.IntegerField()
  graduate_year = models.IntegerField()
  strand = models.ForeignKey(Subject, on_delete=models.SET_NULL)

В настоящее время данные API для всех субъектов формируются следующим образом:

[
  {
    "name": subject.name,
    "years": [
      {
        "joined": Student.objects.filter(strand=subject).values("join_year").annotate(joined=Count("join_year")).order_by("join_year"),
        "graduated": Student.objects.filter(strand=subject).values("graduate_year").annotate(graduated=Count("graduate_year")).order_by("gradaute_year"),
      }
    ],
  }
  for subject in Subject.objects.all()
]

В результате получается:

[
  "name": "Medicine",
  "years": [
    {
      "joined": {
        "join_year": 2000,
        "joined": 123,
      },
      "graduated": {
        "graduate_year": 2001,
        "graduated": 543
      }
    },
    {
      "joined": {
        "join_year": 2002,
        "joined": 123
      },
      "graduated": {
        "graduate_year": 2002,
        "graduated": 543
      }
    }
  ]
]

Как бы то ни было, то, что я хочу, это:

[
  "name": "Medicine",
  "years": [
    {
      "year": 2000,
      "joined": 123,
      "graduated": 0
    },
    {
      "year": 2001,
      "joined": 0,
      "graduated": 543
    },
    {
      "year": 2002,
      "joined": 123,
      "graduated": 543
    }
  ]
]
Вернуться на верх