Pradip Kachhadiya
Pradip Kachhadiya

Reputation: 2235

Incorrect type. Expected pk value, received str in DRF.(one to one field)

When I send post request with data in profile model at that time this error show.

Error

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

I saw this answer but don't know how to implement SlugRelatedField in serializers(OneToOneField)

models.py:

class CustomUser(AbstractUser):
    # username_validator = UnicodeUsernameValidator()
     
    username = models.CharField(
        max_length=80,
        unique=True,
    )
    
    email = models.EmailField(
                unique=True,
                blank=True,         
                )
    .....

    def __str__(self):
        return '%s' %(self.username)

class Profile(models.Model):
    user_name = models.OneToOneField(to = CustomUser,on_delete=models.CASCADE)
    full_name = models.CharField(null=True,max_length=15, blank=True)
    public_name = models.CharField(null=True,max_length=15, blank=True)
    ....

serializers.py:

class ProfileSerializer(serializers.ModelSerializer):
    class Meta:
        model = Profile
        fields = ['user_name','full_name','public_name']

views.py:

class ProfileApiview(CreateAPIView):
    queryset = Profile.objects.all()
    serializer_class = ProfileSerializer

Upvotes: 2

Views: 859

Answers (1)

SDRJ
SDRJ

Reputation: 540

@Pradip - Have a look at this.

 class ProfileSerializer(serializers.ModelSerializer):
        user_name = serializers.PrimaryKeyRelatedField(read_only=True)
        class Meta:
            model = Profile
            fields = ['user_name','full_name','public_name']
    
        def create(self, validated_data):
            user = self.context['request'].user
            profile = Profile.objects.create(
                user_name=user, full_name=validated_data['full_name'].............)
            return profile

Upvotes: 3

Related Questions