Django Rest Framework - Post 更多信息来自外键的用户

Django Rest Framework - Post more info User from Foreign Key

我是 Django Rest Framework 的新手,查看了一些教程。现在我正在尝试创建我自己的用户个人资料,其中包含更多字段,例如:公司名称,phone,....我创建了 OneToOneField(一对一关系)table,其中包含更多信息供我扩展用户。现在我想用 post 方法中的所有字段创建新用户,但出现错误。我该如何解决这个问题?

models.py

class MoreInfo(models.Model):
    user = models.OneToOneField(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
    compName = models.CharField(max_length=100)
    title = models.CharField(null=True,max_length=128)
    birthday = models.DateField(null=True, blank=True)
    phone = models.CharField(max_length=20,blank=True)

api/serializer.py

class MoreInforSerializer(serializers.ModelSerializer):
   class Meta:
       model = MoreInfo
       fields = '__all__'
class CreateUserSerializer(serializers.ModelSerializer):
   moreInfoUser = MoreInforSerializer()
   class Meta:
      model = User
      fields = '__all__'
      extra_kwargs = {'password':{'write_only':True}}
   def create(self,validated_data):
      user = User.objects.create(
      email=validated_data['email'],
      username = validated_data['username'],
      password = make_password(validated_data['password'])
    )
    info_data = validated_data.pop('moreInfoUser')
    moreInfo = MoreInfo.objects.create(
        user = user,
        compName = info_data['compName'],
        title = info_data['title'],
        birthday = info_data['birthday'],
        phone = info_data['phone']
    )
    # user.save()
    return user

views.py

class ListCreateUser(ListCreateAPIView):
    serializer_class = CreateUserSerializer
    def post(self, request, *args, **kwargs):

       serializer = CreateUserSerializer(data=request.data)

       if serializer.is_valid():
           serializer.save()

            return JsonResponse({
               'message': 'Create a new Info successful!'
            }, status=status.HTTP_201_CREATED)

        return JsonResponse({
           'message': 'Create a new Info unsuccessful!'
        }, status=status.HTTP_400_BAD_REQUEST)

urls.py

path('createUser',views.ListCreateUser.as_view()),

POST:

{
   "username":"user5",
   "password":"12345aA@",
   "email":"user5@gmail.com",
   "compName":"A",
   "title":"test",
   "birthday":"1997-05-04",
   "phone":"01234567"
}

Table for create User enter image description here

Errors: Can't create new User

Bad Request: /createUser
"POST /createUser HTTP/1.1" 400 46

您还必须上传 moreInfoUser 因为您在序列化程序中设置了它。

{
   "username":"user5",
   "password":"12345aA@",
   "email":"user5@gmail.com",
   "compName":"A",
   "title":"test",
   "birthday":"1997-05-04",
   "phone":"01234567",
   "moreInfoUser": {
        "compName": "...",
        "title": "...",
        "birthday": "...",
        "phone": "..."
   }
}

希望对您有所帮助。