How to use two serializer inside one API? Faced the problem of getting a general list of objects and getting a single object.
serializers.py:
class SortedItemSerializer(serializers.ModelSerializer): item = ItemSerializer() class Meta: model = SortedItem class SortedItemIdSerializerBasic(serializers.ModelSerializer): class Meta: model = SortedItem view.py:
class SortedItemsAPI(mixins.UpdateModelMixin, generics.ListCreateAPIView): model = SortedItem permission_classes = [ permissions.IsAuthenticated ] def get_serializer_class(self): if self.request.method in ['PUT', 'POST']: return SortedItemIdSerializerBasic return SortedItemSerializer def get_queryset(self): return self.model.objects.filter(user=self.request.user).order_by('order') def create(self, request, *args, **kwargs): data = {'user': request.user.id, 'order': 100} data.update(request.data) serializer = self.get_serializer(data=data) serializer.is_valid(raise_exception=True) self.perform_create(serializer) headers = self.get_success_headers(serializer.data) return Response(serializer.data, status=status.HTTP_201_CREATED, headers=headers) def put(self, request, *args, **kwargs): for order, element in enumerate(request.data['sorted']): self.model.objects.filter( user=request.user, id=element).update( order=order ) print(request.data['sorted']) return Response(status=status.HTTP_200_OK) def delete(self, request, pk, format=None): item = self.model.objects.get(item_id=pk, user=request.user) item.delete() return Response(status=status.HTTP_204_NO_CONTENT) if i add get method:
def get(self, request, pk, format=None): item = self.model.objects.get(item_id=pk, user=request.user) return Response(item, status=status.HTTP_204_NO_CONTENT) That on get all set, but not one object is returned.