Python 类型不正确。预期pk值,收到DRF中的str。(一对一字段)
当我发送post请求时,该错误显示在配置文件模型中 错误 { “用户名”:[ 类型不正确。应为pk值,收到str ]} 我看到了这一点,但不知道如何在序列化程序(OneToOneField)中实现SlugRelatedField 型号。py: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(
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-很高兴我能帮上忙。