В djangorestframewokr как применить group by в сериализаторе django, используя queryset?

models.py

Разделяет две таблицы отображения, где в CategoryLessonMapping, category сопоставляется с lesson, а в UserLessonMapping, user сопоставляется с lesson

------- category mapped with lesson --------------------
class CategoryLessonMapping(models.Model):
    category = models.ForeignKey(MasterCategory, on_delete=models.CASCADE, blank=True, null=True)
    lesson = models.ForeignKey(Lesson, on_delete=models.CASCADE, blank=True, null=True)
    
    class Meta:
        db_table = 'category_lesson_mapping'
        

------- user mapped with lesson --------------------
class UserLessonMapping(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE, blank=True, null=True)
    lesson = models.ForeignKey(Lesson, on_delete=models.CASCADE, blank=True, null=True)
    
    class Meta:
        db_table = 'user_lesson_mapping'
        

views.py


------- getting lesson and category related to lesson in json format --------------------
class PatientLessonListView(ListAPIView):
    serializer_class = PatientLessonSerializer
    queryset = UserLessonMapping.objects.all()
    permission_class = (permissions.IsAuthenticated,)
    
    def get_queryset(self):
        
        user_lesson = self.queryset.filter(user=self.request.user)
        user_lesson_id = user_lesson.values_list("lesson_id", flat=True)
        return CategoryLessonMapping.objects.filter(lesson_id__in=user_lesson_id)

serializers.py


--------- get lesson serialized data -------------
class LessonSerializer(serializers.ModelSerializer):
    
    class Meta:
      model = Lesson
      fields = ('id', 'lesson_type', 'content', 'description')
      depth = 1
      
--------- get category serialized data -------------
class CategorySerializer(serializers.ModelSerializer):
    class Meta:
      model = MasterCategory
      fields = ('id', 'name', 'code')


--------------- getting lesson and category related to user ----------used in views.py------------
class PatientLessonSerializer(serializers.ModelSerializer):
    
    lesson = LessonSerializer()
    category = CategorySerializer()    
    
        
    class Meta:
        model = CategoryLessonMapping
        fields = ['lesson','category']

Тогда формат json, в котором я его получаю, таков

[
    {
        "lesson": {
            "id": 1,
            "lesson_type": {
                "id": 1,
                "lesson_type": "Video",
                "lesson_code": "VIDEO",
                "is_active": 1,
                "created_at": "2022-07-14T13:36:16Z",
                "updated_at": "2022-07-14T13:36:16Z"
            },
            "content": "https://www.youtube.com/watch?v=inpok4MKVLM",
            "description": "Please follow the below steps for next few days"
        },
        "category": {
            "id": 1,
            "name": "insomnia",
            "code": "INS"
        }
    }
]

где в объекте я получаю 2 ключа-значения один - 'category' и другой - 'lesson', но на самом деле я хочу сгруппировать все уроки, относящиеся к одной категории, внутри ключа category. как это

{
  "categories": [
    {
      "name": "insomnia",
      "code": "INS",
      "image": "https://images.everydayhealth.com/images/emotional-health/meditation/a-complete-guide-to-meditation-722x406.jpg?w=1110",
      "icon": "moon",
      "lessions": [
        {
          "type": "video",
          "link": "https://www.youtube.com/watch?v=inpok4MKVLM",
          "description": "Please follow the below steps for next few days"
        }
      ]
    }
  ]
}
Вернуться на верх