ПОЛУЧИТЬ ответ с несколькими моделями - PullRequest
0 голосов
/ 28 апреля 2020

У меня есть два ViewSets. У них есть уникальный сериализатор и модель. Например, CitiesViewSet и TypesViewSet:

CitiesViewSet -

[{"name":"Moscow"},{"name": "Kazan"} etc...]

TypesViewSet -

[{"id": 1, "name": "sample"}, {"id": 2, "name": "sample"} etc... ]

Я хочу объединить эти ViewSets в один ответ GET. Например, я могу сделать запрос GET, и я получу вид -

 { "cities": 
  [
   {"name": "Moscow"},
   {"name": "Kazan"} etc...
  ], 
   "types": 
  [
   {"id": 1, "name": "sample"},
   {"id": 2, "name": "sample"} etc.
  ]
 }

Как его создать?

UPD :

class CityViewSet(viewsets.ModelViewSet):
    pagination_class = None
    queryset = City.objects.all()
    serializer_class = CitySerializer


class TypeViewSet(viewsets.ModelViewSet):
    pagination_class = None
    queryset = Type.objects.all()
    serializer_class = TypeSerializer

Итак, я хочу создать новый набор представлений, содержащий два набора (см. Пример)

1 Ответ

0 голосов
/ 28 апреля 2020

Viewsets предлагают различные методы, такие как создание, список, получение, обновление, ...

# import the serializers
# import JSONResponse 
# import the models

# in your viewset
def list(self, request):
    # print this to see what is it
    data_from_v1 = V1Serializer(queryset_of_model_1).data
    data_from_v2 = V2Serializer(queryset_of_model_2).data

    # return the dicts concatenated
    return JSONResponse(data_from_v1.append(data_from_v2))
    # calling super() will get a list of the model specified in META.model
    # you can do it and concatenate it with the other model too.
...