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": "..."
}
}
Надеюсь, это может помочь.