Django Rest Framework - Размещение дополнительной информации о пользователе по внешнему ключу

Я новичок в Django Rest Framework и проверил некоторые учебники. Сейчас я пытаюсь создать свой собственный профиль пользователя с дополнительными полями, такими как: название компании, телефон, .... Я создал таблицу OneToOneField (отношения один-к-одному) с дополнительной информацией для моего расширенного пользователя. Теперь я хочу создать нового пользователя со всеми полями в методе 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"
}

Таблица для создания пользователя введите здесь описание изображения

Ошибки: Невозможно создать нового пользователя

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": "..."
   }
}

Надеюсь, это может помочь.

Вернуться на верх