当我通过我的api发送数据时,我在/api/add/Object中得到了错误类型错误,类型为UserInfo的对象是不可



我有两个模型,一个是User,另一个是UserInfo。我将用户的附加信息插入到与用户模型具有外键关系的模型中。

当我向api添加额外信息时,数据会被存储,但我得到的不是响应而是错误。

serilaizers.py

class UserCreateSerializerCustom(UserCreateSerializer):

class Meta(UserCreateSerializer.Meta,):
model = User
fields = (
'id',
'email',
'username',
'password',
'first_name',
'last_name',
'phone',         
)
## User Additional Info Serializers
class UserAdditionalSerializers(serializers.ModelSerializer):
user = UserCreateSerializerCustom()
class Meta:
model = UserInfo
fields = (
'user',
'address',
'zipcode',
)

视图.py

class UserAdditionalView(generics.ListCreateAPIView):   
queryset = UserInfo.objects.all()
serializer_class = UserAdditionalSerializers
# authentication_classes = (TokenAuthentication)
def post(self,request,*args,**kwargs):

token = request.META['HTTP_AUTHORIZATION'].split(" ")[1]
print(token)
us = Token.objects.get(key=token).user
user1 = User.objects.get(email=us)
user,_ = UserInfo.objects.get_or_create(user=user1)
user.address=request.POST['address']
user.zipcode=request.POST['zipcode']
user.save()
return Response({'user':user})

urls.py

path('add/',views.UserAdditionalView.as_view()),

型号.py

class User(AbstractUser):
# username = None
email = models.EmailField(verbose_name='email',max_length=50,unique=True)
#phone_regex = RegexValidator(regex=r'^+?1?d{9,15}$')
#phone = PhoneNumberField(unique=True,blank=False,null=False)
phone =  models.CharField(max_length=17,blank=True)
REQUIRED_FIELDS = [
'first_name',
'last_name',
'phone',
'username',
]
USERNAME_FIELD = 'email'
def get_username(self):
return self.email
class UserInfo(models.Model):
user = models.ForeignKey(User,on_delete=models.CASCADE)
address = models.CharField(max_length=50)
zipcode = models.CharField(max_length=20)
def __str__(self):
return str(self.user)

我的预期响应是

{
"user": {
"id": 3,
"email": "test@test.com",
"username": "test",
"first_name": "test",
"last_name": "test",
"phone": "+1(123)-456-7890"
},
"address": "kjbnjklqnja",
"zipcode": "69996"
}

为了得到所需的回复,我应该怎么做。。?

我正在根据随请求发送的令牌查找用户。我刚开始了解rest api的世界,有人能帮我吗。

您不必手动更新post方法中的对象,因为序列化程序会处理它,并且在Response中发送数据之前,您必须序列化数据

所以

from rest_framework import status
class UserAdditionalView(generics.ListCreateAPIView):   
queryset = UserInfo.objects.all()
serializer_class = UserAdditionalSerializers
# authentication_classes = (TokenAuthentication)
def post(self,request,*args,**kwargs):

token = request.META['HTTP_AUTHORIZATION'].split(" ")[1]
us = Token.objects.get(key=token).user
user1 = User.objects.get(email=us)
user,_ = UserInfo.objects.get_or_create(user=user1)
serializer = UserAdditionalSerializers(data=request.data,instance=user)
if serializer.is_valid():
serializer.save()
return Response(serializer.data,status=status.HTTP_201_OK)
else:
return Response(serializer.errors,status=status.HTTP_400_BAD_REQUEST)

相关内容

最新更新