簡體   English   中英

Django Rest Framework - 從外鍵發布更多信息用戶

[英]Django Rest Framework - Post more info User from Foreign Key

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM