Django DRF 创建用户。

3
我正在尝试序列化一个CreateUserSerializer(ModelSerializer)。 我的代码如下。我的问题是它只会创建一个User而不是UserProfile

models.py

class UserProfile(models.Model):
    user = models.OneToOneField(settings.AUTH_USER_MODEL)
    """
    Many other attributes like display_name, dob, hometown, etc
    """

serializers.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['username'],
                validated_data['email'],
                validated_data['password'])
        user.save()
        user_profile = UserProfile(user=user)
        user_profile.save()
        return user_profile

而在我的观点中,它如下所示...


(保留html)

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 has no attribute 'pk'"的错误提示。
1个回答

5
将您的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对象。@Jerin Peter George - Gamal Ali
不对,它将创建一个User实例,并将其分配/映射到新创建的UserProfile实例。如果您想要验证,请检查您的Django AdminDjango shell - JPG
您是对的。它确实可行。我道歉。我忘记了我在尝试不同的方法,更改了api/views.py中的Serializer配置。谢谢您。 - Gamal Ali

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接