Call is-valid when pagination is applied to data in DRF

Viewed 17

I have a ModelViewSet and I am using ModelSerializer. I am also using Pagination that is from django.core.

My views code snippet that works:

page_number = request.data.get("page")
data = Model.objects.filter()
paginator = Paginator(data, 100)
page = paginator.page(int(page_number))
serializer = self.serializer_class(page, many=True)
list_data = serializer.data

What I want to do is to validate the data. Meaning to do:

if serializer.is_valid(raise_exception=True):
    list_data = serializer.validated_data

But I am getting error if I try to run the above code.

Error:

"Expected a list of items but got type \"Page\"."

How can I send the data to is_valid in this case?

1 Answers

Serializer classes accept a Model or QuerySet objects, Page object has a object_list attribute that contains a queryset of the model objects, therefore you need to pass page.object_list:

data = Model.objects.filter()
paginator = Paginator(data, 100)
page = paginator.page(int(page_number))
serializer = self.serializer_class(page.object_list, many=True)
serializer.is_valid(raise_exception=True)
Related