Как объединить несколько моделей в один сериализатор? - PullRequest
0 голосов
/ 09 февраля 2020

необходимо было объединить несколько моделей (4) в одном сериализаторе, но были проблемы с реализацией.

urls.py

from django.urls import path
from .views import FiltersView

urlpatterns = [
    path('filters/' FiltersView.as_view(), name='Filters')
]

views.py

from rest_framework import views
from rest_framework.response import Response
from rest_framework.status import HTTP_200_OK
from .serializers import FiltersSerializers

class FiltersView(views.APIView):
    def get(self, request, *args, **kwargs):
        filters = {}
        filters['model_1'] = Model1.objects.all()
        filters['model_2'] = Model2.objects.all()
        filters['model_3'] = Model3.objects.all()
        serializer = FiltersSerializers(filters, many=True)
        return Response (serializer.data, status=HTTP_200_OK)

serializers.py

from rest_framework import serializers

class FiltersSerializers(serializers.Serializer):
    model_1 = Model1Serializers(read_only=True, many=True)
    model_2 = Model2Serializers(read_only=True)
    model_3 = Model3Serializers(read_only=True)

Но на выходе я получаю:

HTTP 200 OK
Allow: GET, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept

[
    {},
    {},
    {}
]

В чем может быть проблема?

1 Ответ

0 голосов
/ 10 февраля 2020

То, как вы предоставляете данные своему сериализатору, many=True не является правильным аргументом для этого. Это единственный объект, который вы передаете в сериализатор. Ваше мнение должно быть таким.

class FiltersView(views.APIView):
    def get(self, request, *args, **kwargs):
        filters = {}
        filters['model_1'] = Model1.objects.all()
        filters['model_2'] = Model2.objects.all()
        filters['model_3'] = Model3.objects.all()
        serializer = FiltersSerializers(filters)
        return Response (serializer.data, status=HTTP_200_OK)
...