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.
Вернуться на верх