Python 类型不正确。预期pk值,收到DRF中的str。(一对一字段)

Python 类型不正确。预期pk值,收到DRF中的str。(一对一字段),python,django,api,django-rest-framework,Python,Django,Api,Django Rest Framework,当我发送post请求时,该错误显示在配置文件模型中 错误 { “用户名”:[ 类型不正确。应为pk值,收到str ]} 我看到了这一点,但不知道如何在序列化程序(OneToOneField)中实现SlugRelatedField 型号。py: class CustomUser(AbstractUser): # username_validator = UnicodeUsernameValidator() username = models.CharField(

当我发送post请求时,该错误显示在配置文件模型中

错误 { “用户名”:[ 类型不正确。应为pk值,收到str ]}

我看到了这一点,但不知道如何在序列化程序(OneToOneField)中实现SlugRelatedField

型号。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)
    ....
class ProfileSerializer(serializers.ModelSerializer):
    class Meta:
        model = Profile
        fields = ['user_name','full_name','public_name']
class ProfileApiview(CreateAPIView):
    queryset = Profile.objects.all()
    serializer_class = ProfileSerializer
序列化程序。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)
    ....
class ProfileSerializer(serializers.ModelSerializer):
    class Meta:
        model = Profile
        fields = ['user_name','full_name','public_name']
class ProfileApiview(CreateAPIView):
    queryset = Profile.objects.all()
    serializer_class = ProfileSerializer
视图。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)
    ....
class ProfileSerializer(serializers.ModelSerializer):
    class Meta:
        model = Profile
        fields = ['user_name','full_name','public_name']
class ProfileApiview(CreateAPIView):
    queryset = Profile.objects.all()
    serializer_class = ProfileSerializer

@普拉迪普-看看这个

 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

谢谢你的回复。ValueError:无法分配“”:“配置文件。用户名”必须是“CustomUser”实例。如何解决此错误?@Pradip-能否指定您使用的身份验证类型。我的代码基于会话身份验证JSONWebTokenAuthentication@Stacy非常感谢您。当我将
profile=profile(user\u name=user,full\u name=validated\u data['full\u name'])profile.save()替换为
profile=profile.objects.create(user\u name=user,full\u name=validated\u data['full\u name'])时,您的代码运行得非常好['full_name']
@Pradip-很高兴我能帮上忙。