【问题标题】:Incorrect type. Expected pk value, received str in DRF.(one to one field)类型不正确。预期的 pk 值,在 DRF 中收到 str。(一对一字段)
【发布时间】:2021-05-17 06:05:26
【问题描述】:

当我当时在配置文件模型中发送带有数据的发布请求时,会显示此错误。

错误

{ “用户名”: [ “类型不正确。预期的 pk 值,收到的 str。” ] }

我看到了这个answer,但不知道如何在序列化程序中实现 SlugRelatedField(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

【问题讨论】:

    标签: python django api django-rest-framework


    【解决方案1】:

    @Pradip - 看看这个。

     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:无法分配“”:“Profile.user_name”必须是“CustomUser”实例。如何解决这个错误?
    • @Pradip - 您能否指定您使用的身份验证类型。我的代码基于 SessionAuthentication。
    • 我使用 JSONWebTokenAuthentication
    • @Stacy 非常感谢。当我输入 profile =Profile(user_name=user,full_name=validated_data['full_name']) profile.save() 而不是 profile = Profile.objects.create( user_name=user, full_name=validated_data['full_name']) 时,您的代码可以正常工作
    • @Pradip- 很高兴我能帮上忙。
    猜你喜欢
    • 2020-09-09
    • 2015-08-26
    • 2021-09-06
    • 2021-07-03
    • 2018-10-05
    • 1970-01-01
    • 2021-10-11
    • 2023-03-17
    • 1970-01-01
    相关资源
    最近更新 更多