Comment renvoyer json imbriqué par Django Rest Framework

Sep 12 2020

J'ai des données dans la base de données postgres comme celle-ci

et je veux créer une API de repos pour renvoyer json imbriqué comme celui-ci

[
{
    "machine": "MC1",
    "work"   : [
                 {
                    "title": "21TCE20200910",
                    "subTitle1": "INSERT CORE",
                    "subTitle2": "P20200910-001",
                    "subTitle3": "DRAW20200910",
                    "status": 0,
                    "delay": 2
                 },
                 {
                    "title": "21TCE20200910",
                    "subTitle1": "INSERT CORE",
                    "subTitle2": "P20200910-001",
                    "subTitle3": "DRAW20200912",
                    "status": 1,
                    "delay": 1
                 }
               ]
    
},
{
    "machine": "MC2",
    "work"   : [
                 {
                    "title": "21TCE20200911",
                    "subTitle1": "SCREW",
                    "subTitle2": "P20200910-001",
                    "subTitle3": "DRAW20200910",
                    "status": 1,
                    "delay": 2
                 }
               ]
    
},
{
    "machine": "MC3",
    "work"   : [
                 {
                    "title": "21TCE20200913",
                    "subTitle1": "INSERT FIX",
                    "subTitle2": "P20200910-001",
                    "subTitle3": "DRAW20200910",
                    "status": 0,
                    "delay": 1
                 }
               ]
    
}

]

Actuellement, je ne peux renvoyer que des json normaux pour chaque enregistrement mais je veux grouper et renvoyer des json imbriqués comme ci-dessus, toute aide serait appréciée

ceux-ci ci-dessous sont mes codes model.py

    à partir de modèles d'importation django.db
    class MachineSchedule (models.Model):
        machine = models.CharField (longueur_max = 255)
        title = models.CharField (longueur_max = 255)
        subTitle1 = models.CharField (longueur_max = 255)
        subTitle2 = models.CharField (longueur_max = 255)
        subTitle3 = models.CharField (longueur_max = 255)
        status = models.IntegerField (1)
        delay = models.IntegerField (1)

views.py

    depuis django.shortcuts importer le rendu
    depuis rest_framework importer des génériques
    à partir de .models importer MachineSchedule
    depuis .serializers importer MachineScheduleSerializer
    classe MachineScheduleListAPIView (generics.ListCreateAPIView):
        serializer_class = MachineScheduleSerializer
          model = MachineSchedule
            champs = '__all__'

serializers.py

    depuis les sérialiseurs d'importation rest_framework
    à partir de .models importer MachineAllocate
    
    class MachineAllocateSerializer (serializers.ModelSerializer):
        classe Meta:
            model = MachineAllocate
            champs = '__all__'

Réponses

1 SuryaPratapRana Sep 12 2020 at 18:22
#models
class Work(models.Model):
title   = models.CharField(max_length=255)
subTitle1 = models.CharField(max_length=255)
subTitle2 = models.CharField(max_length=255)
subTitle3 = models.CharField(max_length=255)
status = models.IntegerField(1)
delay = models.IntegerField(1)

class MachineSchedule(models.Model):
machine = models.CharField(max_length=255)
work = models.ForeignKey(Work, on_delete=models.CASCADE, related_name='work')

#serializer
from rest_framework import serializers
from .models import *

class WorkSerializer(serializers.ModelSerializer):
class Meta:
    model = MachineAllo
    fields = '__all__'

class MachineScheduleSerializer(serializers.ModelSerializer):
work = WorkSerializer(many=True)
class Meta:
    model = MachineAllo
    fields = '__all__'

#views
from rest_framework import generics
from .models import MachineSchedule
from .serializers import MachineScheduleSerializer

class MachineScheduleListAPIView(generics.ListCreateAPIView):
serializer_class = MachineScheduleSerializer
model = MachineSchedule
fields = '__all__'