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
}
]
]