我是 Django Rest Framework 的新手,并查看了一些教程。現在,我正在嘗試使用更多欄位創建自己的用戶組態檔,例如:公司名稱、電話、...。我創建了 OneToOneField(一對一關系)表,其中包含更多資訊給我的擴展用戶。現在我想用 post 方法中的所有欄位創建新用戶,但我得到了錯誤。我怎樣才能解決這個問題?
模型.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
視圖.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)
網址.py
path('createUser',views.ListCreateUser.as_view()),
郵政:
{
"username":"user5",
"password":"12345aA@",
"email":"[email protected]",
"compName":"A",
"title":"test",
"birthday":"1997-05-04",
"phone":"01234567"
}
用于創建用戶的表 在此處輸入影像描述
錯誤:無法創建新用戶
Bad Request: /createUser
"POST /createUser HTTP/1.1" 400 46
uj5u.com熱心網友回復:
您還必須上傳moreInfoUser
,因為您在序列化程式中設定了它。
{
"username":"user5",
"password":"12345aA@",
"email":"[email protected]",
"compName":"A",
"title":"test",
"birthday":"1997-05-04",
"phone":"01234567",
"moreInfoUser": {
"compName": "...",
"title": "...",
"birthday": "...",
"phone": "..."
}
}
希望它可以幫助。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/477894.html