Django rest framework browsable api показывает null для поля manytomany

Я собираюсь реализовать api для приложения блога, используя DRF ModelViewSet:
. Вот как я реализовал:
views.py

from rest_framework.permissions import IsAuthenticatedOrReadOnly
from rest_framework.response import Response
from .serializers import PostSerializer, CategorySerializer
from ...models import Post, Category
from rest_framework import viewsets
from rest_framework.decorators import action
from .permissions import IsOwnerOrReadOnly
from django_filters.rest_framework import DjangoFilterBackend
from rest_framework.filters import SearchFilter, OrderingFilter
from .paginations import DefaultPagination


class PostModelViewSet(viewsets.ModelViewSet):
    permission_classes = [IsAuthenticatedOrReadOnly, IsOwnerOrReadOnly]
    serializer_class = PostSerializer
    queryset = Post.objects.filter(ok_to_publish=True)
    filter_backends = [DjangoFilterBackend, SearchFilter, OrderingFilter]
    filterset_fields = {
        "category": ["exact", "in"],
        "author": ["exact"],
        "ok_to_publish": ["exact"],
    }
    search_fields = ["title", "content"]
    ordering_fields = ["publish_date"]
    pagination_class = DefaultPagination

    @action(detail=False, methods=["get"])
    def get_ok(self, request):
        return Response({"detail": "ok"})


class CategoryModelViewSet(viewsets.ModelViewSet):
    permission_classes = [IsAuthenticatedOrReadOnly]
    serializer_class = CategorySerializer
    queryset = Category.objects.all()

serializers.py

from rest_framework import serializers
from ...models import Post, Category
from accounts.models import Profile


class CategorySerializer(serializers.ModelSerializer):
    class Meta:
        model = Category
        fields = ["id", "name"]


class PostSerializer(serializers.ModelSerializer):
    summary = serializers.CharField(source="get_summary", read_only=True)
    relative_url = serializers.CharField(source="get_relative_api_url", read_only=True)
    absolute_url = serializers.SerializerMethodField(method_name="get_absolute_api_url")
    category = serializers.SlugRelatedField(
        queryset=Category.objects.all(), slug_field="name", many=True
    )

    class Meta:
        model = Post
        fields = [
            "id",
            "title",
            "author",
            "image",
            "content",
            "summary",
            "category",
            "relative_url",
            "absolute_url",
            "ok_to_publish",
            "login_required",
            "n_views",
            "created_at",
            "publish_date",
        ]
        read_only_fields = ["author"]

    def get_absolute_api_url(self, obj):  # It is not a standard and correct method
        request = self.context.get("request")
        return request.build_absolute_uri(obj.pk)

    def to_representation(self, instance):
        request = self.context.get("request")
        representation = super().to_representation(instance)
        if request.parser_context.get("kwargs").get("pk"):
            representation.pop("summary", None)
            representation.pop("relative_url", None)
            representation.pop("absolute_url", None)
        else:
            representation.pop("content", None)
        representation["category"] = CategorySerializer(
            instance.category, context={"request": request}
        ).data
        return representation

    def create(self, validated_data):
        validated_data["author"] = Profile.objects.get(
            user__id=self.context.get("request").user.id
        )
        return super().create(validated_data)

но значения полей категорий равны null, а также пагинация не работает и я получил ошибку ниже:

AttributeError at /blog/api/v1/post/

У объекта 'list' нет атрибута 'split'

Метод запроса: GET URL запроса: http://127.0.0.1:8000/blog/api/v1/post/?page=2 Версия Django: 3.2.16 Тип исключения: AttributeError Значение исключения:

у объекта 'list' нет атрибута 'split'

Exception Location: /usr/local/lib/python3.9/site-packages/django_filters/widgets.py, строка 208, in value_from_datadict

Вернуться на верх