Как я могу получить набор запросов на основе таблицы отображения в django rest framework?

models.py

class MasterCategory(models.Model):
    name = models.CharField(max_length=200, blank=True, null=True)
    code = models.CharField(max_length=20, blank=True, null=True)
    icon = models.TextField(blank=True, null=True)
    image = models.TextField(blank=True, null=True)
    is_active = models.BooleanField(default=True, blank=True, null=True)
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now_add=True, blank=True, null=True)

    class Meta:
        db_table = 'master_category'

class MasterLessonType(models.Model):
    lesson_type = models.CharField(max_length=20, blank=True, null=True)
    lesson_code = models.CharField(max_length=20, blank=True, null=True)
    is_active = models.IntegerField(blank=True, null=True)
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now_add=True, blank=True, null=True)

    class Meta:
        db_table = 'master_lesson_type'


class Lesson(models.Model):
    lesson_type = models.ForeignKey(MasterLessonType, on_delete=models.CASCADE, blank=True, null=True)
    content = models.TextField(blank=True, null=True)
    description = models.TextField(blank=True, null=True)
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now_add=True, blank=True, null=True)
    
    class Meta:
        db_table = "lesson"

** --- category can be mapped to multiple 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 can be mapped sto multiple 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'

Я хочу получить данные о вошедшем в систему user, пользователе, отображенном на lesson, уроке, отображенном на category и уроке, отображенном на lesson type, следующим образом

{
user:{
'id':1,
'first_name': 'alan'
'last_name': 'walker'
},
'lesson': [
           {
            "id": 1,
            "lesson_type": {
                "id": 1,
                "lesson_type": "Video",
                "lesson_code": "VIDEO",
            },
            "content": "https://www.youtube.com/watch?v=inpok4MKVLM",
            "description": "Please follow the below steps for next few days",
            "category": [
                   {'id': 1, 'name': "insomia", 'code': "ins"}, 
                   {'id': 2, 'name': "stress", 'code': "str"}
                  ]
           },
           {
            "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': "insomia", 'code': "ins"}, 
                   {'id': 2, 'name': "stress", 'code': "str"}
                  ]
           }
          ]
} 

или если кто-нибудь может сделать его как ниже, было бы здорово, но не думаю, что это возможно

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

я пробовал делать так:

class LessonSerializer(serializers.ModelSerializer):
    
    class Meta:
      model = Lesson
      fields = ('id', 'lesson_type', 'content', 'description')
      depth = 1
class PatientLessonSerializer(serializers.ModelSerializer):
    
    lesson = LessonSerializer()
    
    
    class Meta:
        model = UserLessonMapping
        fields = ['lesson',]

но возвращается

[
    {
        "user": 14,
        "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"
        }
    },
    {
        "user": 14,
        "lesson": {
            "id": 2,
            "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"
        }
    }
]

может ли кто-нибудь помочь мне с этим.

Вернуться на верх