Django rest framework фильтрация и группировка элементов в сериализаторе
У меня есть такие модели:
class schoolCycle(models.Model):
name = models.CharField(max_length=255)
code = models.CharField(max_length=255)
class measurements(models.Model):
name = models.CharField(max_length=255)
weight = models.FloatField()
school_cycle_id = models.ForeignKey(schoolCycle,on_delete=models.DO_NOTHING, related_name='measurements')
code = models.CharField(max_length=255)
class aspects(models.Model):
name = models.CharField(max_length=255)
code = models.CharField(max_length=255)
measurement_id = models.ForeignKey(measurements,on_delete=models.DO_NOTHING, related_name='aspects')
class standards(models.Model):
name = models.CharField(max_length=255)
code = models.CharField(max_length=255)
weight = models.FloatField()
aspect_id = models.ForeignKey(aspects,on_delete =models.DO_NOTHING, related_name='standards')
Как видно, "стандарт" ссылается на "аспект", а аспект ссылается на "измерение", а измерение ссылается на "школьный цикл" как внешний ключ. мы хотим создать серийник следующим образом:
[{ "measurement 1" : {
"school cycle 1" :{
"aspect 1": {
{"standard 1" : ...},
{"standard 2" : ...},
}
"aspect 2": {
{"standard 3" : ...},
{"standard 4" : ...},
}
}
"school cycle 2" :{
"aspect 3": {
{"standard 5" : ...},
{"standard 6" : ...},
}
"aspect 4": {
{"standard 7" : ...},
{"standard 8" : ...},
}
}
"measurement 2" : {
"school cycle 3" :{
"aspect 5": {
{"standard 9" : ...},
{"standard 10" : ...},
}
"aspect 6": {
{"standard 11" : ...},
{"standard 12" : ...},
}
}
"school cycle 4" :{
"aspect 7": {
{"standard 13" : ...},
{"standard 14" : ...},
}
"aspect 8": {
{"standard 15" : ...},
{"standard 16" : ...},
}
}
}]
Имеется в виду, что я хочу сериализовать, группируя аспекты, которые имеют одинаковый школьный цикл и измерения, под своим собственным ключом.
Как добиться такой группировки в Django rest framework? Заранее благодарю за помощь.
from rest_framework import serializers
class SchoolCycleSerializer(serializers.ModelSerializer):
measurements = MeasurementsSerializer(read_only=True, many=True)
class Meta:
model = schoolCycle
fields = '__all__'
class MeasurementsSerializer(serializers.ModelSerializer):
aspects = AspectsSerializer(read_only=True, many=True)
class Meta:
model = measurements
fields = '__all__'
class AspectsSerializer(serializers.ModelSerializer):
standards = StandardsSerializer(read_only=True, many=True)
class Meta:
model = aspects
fields = '__all__'
class StandardsSerializer(serializers.ModelSerializer):
class Meta:
model = standards
fields = '__all__'
# note that it's good practice to name your models starting with a capital letter.