Создание json-структуры с помощью концепции вложенных сериализаторов
Я пытаюсь сделать api с Django Rest Framework, формат api выглядит следующим образом, я новичок в концепции вложенного сериализатора, поэтому я пытался сделать реляционные модели и вложенный сериализатор, который доступен в документации, но это не работает для меня, есть ли кто-нибудь, кто может помочь?
это мой models.py
это мой serializers.py :
class MPSerializer(serializers.ModelSerializer):
class Meta:
model = MP
fields = '__all__'
class TPSerializer(serializers.ModelSerializer):
class Meta:
model = TP
fields = '__all__'
class VFDDSerializer(serializers.ModelSerializer):
class Meta:
model = vfdd
fields = '__all__'
class apiSerializer(serializers.ModelSerializer):
device1=MPSerializer(many=True,read_only=True)
device2=TPSerializer(many=True,read_only=True)
device3=VFDDSerializer(many=True,read_only=True)
class Meta:
model = api
fields = '__all__'
и это мои взгляды :
class apiListView(generics.ListCreateAPIView):
serializer_class= apiSerializer
queryset= api.objects.all()
class deviceListView(generics.ListCreateAPIView):
serializer_class= MPSerializer
queryset= MP.objects.all()
Так что вы можете сделать что-то вроде этого .
Это ваши сериализаторы
class MPSerializer(serializers.ModelSerializer):
class Meta:
model = MP
fields = '__all__'
class TPSerializer(serializers.ModelSerializer):
class Meta:
model = TP
fields = '__all__'
class VFDDSerializer(serializers.ModelSerializer):
class Meta:
model = vfdd
fields = '__all__'
и вы можете создать представление следующим образом
from rest_framework.views import APIView
from . import serializers
from rest_framework.response import Response
Class deviceList(APIView):
permission_classes = [] # if you have any permission classes.
def get (self, request):
mp = MpModel.objects.all()
tp = TpModel.objects.all()
vfdd = VfddModel.objects.all()
mp_data = serializers.MPSerializer(mp, many=True).data
tp_data = serializers.TPSerializer(tp, many=True).data
vffdd_data = serializers. VFDDSerializer(vfdd, many=True).data
nested_data = mp_data.extend(tp_data + vffdd_data)
res = {
"devices": nested_data
}
return Response(res)
Надеюсь, это поможет вам решить вашу проблему.
вот мой views.py :
from . import serializers
class deviceList(APIView):
permission_classes = [] # if you have any permission classes.
def get (self, request):
mp = MP.objects.all()
tp = TP.objects.all()
vfd = vfddModel.objects.all()
mp_data = serializers.MPSerializer(mp, many=True).data
tp_data = serializers.TPSerializer(tp, many=True).data
vffdd_data = serializers. VFDDSerializer(vfd, many=True).data
nested_data = mp_data.extend(tp_data + vffdd_data)
res = {
"devices": nested_data
}
return Response(res)
вот мой serializer.py :
from rest_framework import serializers
from django.contrib.auth.models import User
from .real_time_models import *
class MPSerializer(serializers.ModelSerializer):
type = serializers.SerializerMethodField(read_only=True)
def get_type(self, obj):
return "MP"
class Meta:
model = MP
fields = '__all__'
class TPSerializer(serializers.ModelSerializer):
type = serializers.SerializerMethodField(read_only=True)
def get_type(self, obj):
return "TP"
class Meta:
model = TP
fields = '__all__'
class VFDDSerializer(serializers.ModelSerializer):
type = serializers.SerializerMethodField(read_only=True)
def get_type(self, obj):
return "VFDD"
class Meta:
model = vfdd
fields = '__all__'