Why can i not add object into field rest_framework

I want to add some objects using rest_framework serializers but I am getting this error from the serializer. I See some people with the same but I don't know how to fix it in my situation.


{
    "user": [
        "Incorrect type. Expected pk value, received str."
    ]
}

Of course, I read the documentation about serializers and relation but I still don't understand.. newbie in django

Here my models


class UserData(AbstractUser):

    username = None
    name = models.CharField(max_length=100, unique=True)
    email = models.EmailField(max_length=100, unique=True)
    date_joined = models.DateTimeField(auto_now_add=True)
    pseudo = models.CharField(max_length=200,unique=True)
    hashtag = models.CharField(max_length=200, unique=True)
    is_admin = models.BooleanField(default=False)
    is_active = models.BooleanField(default=True)
    is_staff = models.BooleanField(default=False)
    is_superuser = models.BooleanField(default=False)
    
    objects = UserManager()
    
    USERNAME_FIELD = "pseudo"
    REQUIRED_FIELDS = ['name','hashtag','email']

    def __str__(self):
        return self.name

class Pebbles(models.Model):
    image = models.CharField(max_length=200)
    user = models.ForeignKey(UserData, related_name="pebbles",on_delete=models.CASCADE)

    class Meta():
        unique_together = ["id","user"]

I can get a list of pebbles from that view it works.


class PebblesView(generics.ListCreateAPIView):
    permission_classes = [IsAuthenticated]
    authentication_classes = [JWTAuthentication]
    serializer_class = PebblesSerializer

    def get_queryset(self):
        return Pebbles.objects.all()
    
    def create(self, request):
        serializer = PebblesSerializer(data=request.data)
        serializer.is_valid(raise_exception=True)
        serializer.save()
        return Response(serializer.data)

I can register a user with my UserSerializer. I have the same logic for pebbles but it doesn't work. In the Django shell, I can create pebbles just like this.

class UserSerializer(serializers.ModelSerializer):
    pebbles = serializers.StringRelatedField(many=True)

    class Meta:
        model = UserData
        fields = ["id", "pseudo", "hashtag","email", "name", "password","pebbles"]

    def create(self, validated_data):
        user = UserData.objects.create(
            email=validated_data['email'],
            name=validated_data['name'],
            pseudo=validated_data['pseudo'],
            hashtag=validated_data['hashtag']
        )
        user.set_password(validated_data['password'])
        user.save()
        return user

class PebblesSerializer(serializers.ModelSerializer):

    class Meta:
        model = Pebbles
        fields = ["id","image","user"]

    def create(self, request):
        pebbles = Pebbles.objects.create(
            image=request['image'],
            user=UserData.objects.get(pseudo=request['user'])
        )
        pebbles.save()
        return pebbles

Can someone give me a hint ?

I didn't understand that Django rest framework go so far in automation.

request["user"] 

It already contains the UserData object so no need to search for it. And I do make a mistake using the pseudo field instead id.

Back to Top