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