Как я могу получить набор запросов на основе таблицы отображения в 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"
}
}
]
может ли кто-нибудь помочь мне с этим.