Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django rest框架-如何发布扩展用户_Django_Django Rest Framework - Fatal编程技术网

Django rest框架-如何发布扩展用户

Django rest框架-如何发布扩展用户,django,django-rest-framework,Django,Django Rest Framework,我对django rest api和使用OneToOneField的用户模型扩展有一些问题 我尝试发送: { "username": "test1", "password": "test", "password1": "test", "profile": { "user": &quo

我对django rest api和使用OneToOneField的用户模型扩展有一些问题

我尝试发送:

{
    "username": "test1",
    "password": "test",
    "password1": "test",
    "profile": {
            "user": "test1",
            "test_field": "123",
        }
}
并得到错误:

{
    "profile": {
        "user": [
            "Incorrect type. Expected pk value, received str."
        ]
    }
}
所以我想,我应该正确地创建序列化程序——获取并设置当前用户(我尝试注册)

这种想法正确吗? 有人能给我一些建议吗

我的代码如下:

models.py

class UserProfile(models.Model):
    user = models.OneToOneField(get_user_model(), on_delete=models.CASCADE)
    test_field = models.CharField(max_length=640, blank=True)

    def __str__(self):
        return self.user.username

def create_user_profile(sender, instance, created, **kwargs):
    if created:
        profile, created = UserProfile.objects.get_or_create(user=instance)

post_save.connect(create_user_profile, sender=get_user_model())
views.py:

class UserProfileViewSet(viewsets.ModelViewSet):
    serializer_class = UserProfileSerializer
    permission_classes = (IsAuthenticated,)

    # to get data only for current user.
    def get_queryset(self):
        return UserProfile.objects.filter(user=self.request.user)
序列化程序.py

class ProfileSerializer(serializers.ModelSerializer):
    class Meta:
        model = Profile
        fields = '__all__'

class UserSerializer(serializers.ModelSerializer):
    profile = ProfileSerializer(required=True)

    class Meta:
        model = get_user_model()
        fields = '__all__'

    def create(self, validated_data):
        profile = ProfileSerializer.create(ProfileSerializer(), validated_data)
        user, created = get_user_model().objects.create(profile=profile)
        return user