Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/22.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 DRF创建用户_Django_Django Models_Django Rest Framework - Fatal编程技术网

Django DRF创建用户

Django DRF创建用户,django,django-models,django-rest-framework,Django,Django Models,Django Rest Framework,我正在尝试序列化CreateUserSerializer(ModelSerializer) 我的代码如下。我的问题是,它只会创建用户,而不会创建用户配置文件 型号.py class UserProfile(models.Model): user = models.OneToOneField(settings.AUTH_USER_MODEL) """ Many other attributes like display_name, dob, hometown, etc

我正在尝试序列化
CreateUserSerializer(ModelSerializer)
我的代码如下。我的问题是,它只会创建
用户
,而不会创建
用户配置文件

型号.py

class UserProfile(models.Model):
    user = models.OneToOneField(settings.AUTH_USER_MODEL)
    """
    Many other attributes like display_name, dob, hometown, etc
    """
class CreateUserProfileSerializer(ModelSerializer):
    class Meta:
        model = User
        fields = ('id', 'username', 'email', 'password')
        extra_kwargs = {'password': {'write_only': True}}

    def create(self, validated_data):
        user = User.objects.create(
                validated_data['username'],
                validated_data['email'],
                validated_data['password'])
        user.save()
        user_profile = UserProfile(user=user)
        user_profile.save()
        return user_profile
序列化程序.py

class UserProfile(models.Model):
    user = models.OneToOneField(settings.AUTH_USER_MODEL)
    """
    Many other attributes like display_name, dob, hometown, etc
    """
class CreateUserProfileSerializer(ModelSerializer):
    class Meta:
        model = User
        fields = ('id', 'username', 'email', 'password')
        extra_kwargs = {'password': {'write_only': True}}

    def create(self, validated_data):
        user = User.objects.create(
                validated_data['username'],
                validated_data['email'],
                validated_data['password'])
        user.save()
        user_profile = UserProfile(user=user)
        user_profile.save()
        return user_profile
在我看来是这样的

api/views.py

class RegistrationAPI(GenericAPIView):
    serializer_class = CreateUserProfileSerializer

    def post(self, request, *args, **kwargs):
        serializer = self.get_serializer(data=request.data)
        serializer.is_valid(raise_exception=True)
        user = serializer.save()
        return Response({
            "user": UserProfileSerializer(user, context=self.get_serializer_context()).data,

        })
如果你遵循代码,回复会给我一个提示

“RelatedManager没有属性'pk'”


更改您的
serializer.py
,如下所示

class CreateUserProfileSerializer(ModelSerializer):
    class Meta:
        model = User
        fields = ('id', 'username', 'email', 'password')
        extra_kwargs = {'password': {'write_only': True}}

    def create(self, validated_data):
        user = User.objects.create(**validated_data)
        UserProfile.objects.create(user=user)
        return user


您好,这不起作用。仍然只创建用户对象,但不创建UserProfile对象@杰林·彼得·乔治诺普,你错了。它将创建一个
User
实例,并将其分配/映射到新创建的
UserProfile
实例。检查您的
Django管理员
Django shell
,如果您想知道您是对的。它确实有效。我道歉。我忘了我在玩它,在api/views.py中修改了序列化程序。非常感谢。