Wondermarin
@Wondermarin

Как объединить несколько моделей в один сериализатор?

Здравствуйте, понадобилось объединить несколько моделей(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

[
    {},
    {},
    {}
]


В чем может быть проблема?
  • Вопрос задан
  • 1741 просмотр
Решения вопроса 1
Wondermarin
@Wondermarin Автор вопроса
Ответ на мой вопрос оказался крайне простым, оказывается я просто оставил аргумент many=true в 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)
        return Response (serializer.data, status=HTTP_200_OK)
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы