Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

"Incorrect type. Expected pk value, received list." Error DRF React

Error when attempting post request Many to Many Relation

Question is

when I put list in request It shows an Error: "Incorrect type. Expected pk value, received list." .But it is m2m field so how can i

View

class PostList(generics.ListCreateAPIView):
    queryset = Post.objects.all()
    serializer_class = serializers.PostSerializer
    permission_classes = [permissions.IsAuthenticatedOrReadOnly]
    parser_classes = (MultiPartParser, FormParser)

    def post(self, request, *args, **kwargs):
        print(request.data['categories'])
        file_serializer = serializers.PostSerializer(data=request.data)
        print(request.data.dict())
        if file_serializer.is_valid():
                print(request.data)
                file_serializer.save(owner=self.request.user)
                return Response(file_serializer.data, status=status.HTTP_201_CREATED)
        else:
                return Response(file_serializer.errors, status=status.HTTP_400_BAD_REQUEST)

Serializer

class PostSerializer(serializers.ModelSerializer):
    owner = serializers.ReadOnlyField(source='owner.username')
    comments = serializers.PrimaryKeyRelatedField(many=True,queryset=Comment.objects.all())
    categories = serializers.PrimaryKeyRelatedField(many=True,queryset=Category.objects.all())

    class Meta:
        model = Post
        fields = ['id', 'title', 'body','owner','notify_users' ,'comments', 'categories','image']
 

Request I send

{
'title': 'my demo Title',
 'body': 'it is my demo /nCode for the desc for body',
 'categories': ['1', '2', '3', '4', '5', '6', '7'],
 'image': image
}

No error with this Code

{
'title': 'my demo Title',
 'body': 'it is my demo /nCode for the desc for body',
 'categories': '1',
 'image': image
}

GitHub Repo

like image 286
manu kutty Avatar asked Feb 11 '26 09:02

manu kutty


1 Answers

I am also facing the same issue when I try to add the owner field manually in request.data.

my serializer class

fields = ("file", "name", "size", "owner")

in my views

request.data['owner'] = request.user
file_serializer = FileSerializer(data=request.data)
    if file_serializer.is_valid():
        file_serializer.save()

in my Model

owner = models.OneToOneField(User, primary_key=True, on_delete=models.CASCADE)
like image 152
Jenny Patel Avatar answered Feb 18 '26 13:02

Jenny Patel



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!