Получить данные в определенном формате из сериализаторов в Django - PullRequest
0 голосов
/ 08 мая 2020

Мои модели:

class Student(models.Model):
    name = models.CharField(max_length=100)
    email = models.CharField(max_length=100, unique=True)
    password = models.CharField(max_length=25)


class Subject(models.Model):
    name = models.CharField(max_length=100)


class Student_subject_mapping(models.Model):
    student = models.ForeignKey(Student, on_delete=models.CASCADE)
    subject = models.ForeignKey(Subject, on_delete=models.CASCADE)

Я пытаюсь получить все Student_subject_mapping данные в базе данных в формате, указанном ниже:

{
"results": [{
    "id": 1,        ----------------> student id
    "email": "student_1@gmail.com",------------> student email
    "subjects": [
        {
            "id": 1,
            "name": "subject_1"
        },
        {
            "id": 2,
            "name": "subject_2"
        },
        ...
    ]
},

Какой будет запрос к получить данные следующим образом? Как я могу получить данные в указанном выше формате?

1 Ответ

0 голосов
/ 08 мая 2020

измените модель объекта на

class Subject(models.Model):
    name = models.CharField(max_length=100)
    student = models.ForeignKey(Student, on_delete=models.CASCADE, related_name='subjects')

и StudentSerializer на

class StudentSerializer(serializers.ModelSerializer):

    class Meta:
        model = Student
        fields = ('id', 'email', 'subjects')
        depth = 1 

, или вы получите следующий результат:

result = {
    "subject": {
        "id": 1,
        "name": "subject_1"
    },
    "student": {
        "id": 2,
        "email": "subject_2"
    }
}

, отредактировав Student_Mapping_Serializers от до

class Student_Mapping_Serializers(serializers.ModelSerializer):

    class Meta:
       model = Student_subject_mapping
       fields = "__all__"
       depth = 1

надеюсь, что это поможет.

отредактировано

class Student_Mapping_Serializers(serializers.ModelSerializer):
    subject = SubjectSerializer(read_only=True, many=True)

    class Meta:
       model = Student_subject_mapping
       fields = ("student", "subject")
       depth = 1
...